突然だが、あなたはSolidityを知っているだろうか?
ソ、ソリッドギアなら知っている。。。と思ったそこのあなた!
私もである。
普通に生活していてSolidity(読み方はソリディティ)を聞くことは、まずない。
私はたまたま聞いてしまった。どれくらいたまたまかと言うと、いつも昼ごはんを買いに行く馴染みの店が、店の都合で休みだったくらいたまたまだ!!
そんなSolidityについてなぜ書いているかと言うと、これからのWeb3.0時代では重要なプログラミング言語らしく、しかもSolidityの使い手は儲かるらしい、と聞いて気になったのだ。
そこで、今回Solidityについて解説していく。
Solidityの特徴・メリット・事例
特徴
ブロックチェーン上で動作するサービス開発に当たり、スマートコントラクトを実装する。このスマートコントラクトを記述する言語がSolidityである。
SolidityはEtherium向け開発されたため、Etheriumとは相性がいい。
SolidityのアプリケーションのほとんどはEthereum上にあるが、クロスプラットフォーム機能もサポートしている。また、文法はJavaScriptに似ており、初心者でも使いやすい。
ブロックチェーンとは?
ブロックチェーンとは、ブロックと呼ばれる多数のサーバーで、過去から現在までの記録をチェーンのように繋ぎ、常に共有することで改ざんを防ぐ仕組みである。
チェーン上には多数のブロックがあり、多数のブロック間の同期は多数決で保たれる。この多数決の仕組みによって、1台のブロックで改ざんがあっても、他のブロックによって元の正しい記録にすぐに上書きされる。
仮想通貨はこの特性を活用しており、各人の仮想通貨の保有数や取引履歴が、改ざん不可能な形でかつ時系列に全て記録されている。ちなみに銀行では、システムにだけ記録されている。
スマートコントラクトとは?
スマートコントラクトとは、「契約の自動化」という意味である。契約内容と実行条件を決めておくことで自動で契約を実行してくれる仕組みだ。
例えば「自動販売機」をイメージしてもらいたい。お金を入れてボタンを押すと、自動で商品が出てくる。これはボタンを押してから商品がガラガラコンと出てくるまで、「処理が自動化」されているからである。
この自動化された部分がブロックチェーン上の「契約の自動化」であり、この「契約の自動化」がスマートコントラクトである。
メリット
Solidityのメリットは大きく3つある。文法が理解しやすい、ブロックチェーン開発がしやすい、市場が大きいことである。
1、文法が理解しやすい
Solidityは利用目的が明確である。これにより、単純な文法で記述でき、比較的理解しやすく、学びやすい。コントラクトのように複雑な機能を実装するプログラミング言語は、「難しい」イメージを持たれやすいが、Solidityはシンプルな文法で記述できるように設計されている。
プログラミング言語の中でもJavaScriptに似た文法で、基本的な文法やソースコードの入手方法が似ている。JavaScript自体が習得しやすいプログラミング言語であるため、類似のSolidityについても習得しやすいのである。
ただ、これは他のプログラミング言語にも共通していることだが、文法は理解しやすいものの、実際に開発をするためにはフレームワークやライブラリなどの理解も必要だ。
2、ブロックチェーン開発がしやすい
Solidityはスマートコントラクトの取引処理の実行に利用目的が特化した、コントラクト指向のプログラミング言語であり、実装に対応しているため、ブロックチェーンの開発がしやすい。
豆知識として、コントラクト指向=ブロックチェーンではない。コントラクト指向のプログラミング言語は厳密にはブロックチェーンだけでなく、ブロックチェーンを含む他の様々なテクノロジーを実装することができる。
3、市場が大きい
Solidityはスマートコントラクトのために初めて開発されたプログラミング言語であり、かつEtheriumのための言語だ。Etheriumはビットコインに次いで世界2位の時価総額を誇る仮想通貨で、世界中で使われている。そのため開発も活発に行われ、その分コミュニティも活発で大きい。これがプログラミング言語として、すごく大きな利点なのである。
事例
Solidityを活用してのスマートコントラクト開発では、さまざまなユースケースが想定されている。 代表的な例は以下の4つだ。
1、マルチ署名ウォレット
マルチ署名ウォレットと聞いてもイメージが湧きにくいと思う。マルチ署名とは複数の署名、すなわち複数の鍵を持つウォレットのことだ。
これまではシングル署名、すなわち一つの鍵を持つウォレットだったが、スマートコントラクトでは複数の署名=マルチ署名が活用できる。ちなみに「鍵」とは、簡単にはパスワードのことだ。
シングル署名とマルチ署名の違いは、イメージとして、シングル署名はGmailや会社のパソコンで使っている一つのログインパスワード。
マルチ署名は、仮想通貨の取引所などで最近使われているメール、SMS、グーグル二段階認証など複数の方法でログインする際のパスワードや数字である。
ブロックチェーンの世界では、従来のシングル署名だとログインに必要な鍵を失くしたり改ざんされたりすると認証されずにログインができなくなる。
そこで、一つの鍵を失くしたり改ざんされたりして使えなくなっても、他の方法が使えたら認証・ログインできるようにした。これがマルチ署名だ。
マルチ署名ウォレットでは概ね3つ以上の認証方法があり、1つの方法がダメでも他の2つの方法で認証されればログインができる。そして、これを可能にしているのがスマートコントラクトの技術なのだ。
2、投票
現在の投票は「データの操作、偽の有権者、投票機の改ざん」などのリスクや問題がある。そこでスマートコントラクトを活用して投票プロセスの透明化と合理化を図ることで、投票の信頼性と効率を上げることができる。
3、ブラインドオークション
従来のオープンオークションではお互いの入札を見ることができ、紛争や不正が起きるリスクがある。そこでスマートコントラクトを活用してお互いの入札を隠しつつオークションを設計することで、これらのリスクを減らす、あるいは失くすことができる。
4、クラウドファンディング
従来のクラウドファンディングでは第三者への委託に伴うデータ管理や中間コストなどの課題が生じる。そこでスマートコントラクトを活用して第三者への委託を必要とせずにデータ管理ができ、中間コストも発生しなくすることができる。
Solidityの需要
Solidityへの需要は年々増加している。Solidityを使った開発需要自体が増加しており、これに伴い開発ができるSolidityエンジニアへの需要も増加しているのだ。
Solidityを使った開発の需要増加
ここ数年で各種決済や金融業界などでのブロックチェーンへの対応が進み、活用が急速に進んでいる。この背景には、ブロックチェーンの特徴である信頼性担保があり、信頼性が特に求められる金融業界で有用なことがある。
金融業界は他の業界に先立ってブロックチェーンの活用を進めており、現在それに追従するかのように他の業界でも幅広く導入され始めている。
ブロックチェーン導入において、実装するためにSolidityが使われることが増えており、これによりSolidityへの需要が増加している。特に2022年に急激に増加している。
それでもまだまだブロックチェーンの活用はこれからであり、今後の需要と技術発展を考えると、これからのさらなる拡大余地が残されている。
その中で世界中で利用されているEthereumのスマートコンラクト言語であるSolidityは、将来性が非常に明るい。
Solidityエンジニアへの需要増加
Solidityの開発需要増加に伴うエンジニアへの需要増加により、金融業界でも他の業界でも、常にエンジニアを探している。
なおSolidityの開発需要増加の背景には、Solidity自体の一貫した改善にも理由があり、言語システムが随時更新され、エンジニアの開発方法を改善向上させるためのバグ修正や多くの新機能導入が頻繁にされている。
Solidityエンジニアの給料
Solidityエンジニアは需要に供給が追いついていないエンジニアの中でも、直近1、2年におけるスマートコントラクト開発需要の増加により特に需要に供給が追いついておらず、その分給料も高くなっている。
複数の求人サイトを見てみると、Solidityの案件はこの1年で2割から3割程度増加している。大企業のみならず、ブロックチェーンを取り扱う中小企業の求人や案件も多く見られる。
また、フリーランス向けの案件では、Solidityエンジニアの単価は月80万円〜90万円程度と、エンジニア全体の平均単価である月70万円程度よりも高い。
Solidityエンジニアの給与の高さは日本だけでなく世界的な傾向で、海外だとアメリカではジュニアで1,000万円〜、経験者で1,500万円〜、シニアになると2,000万円〜になるようだ。これは英語ができる、あるいは世界で活躍したいエンジニアにとっては、チャンスではないだろうか。
ソース:What Does A Solidity Engineer Do?
ソース:REPORT: State of Crypto Hiring
ソース:Solidity Developer(2022年9月)
Solidityエンジニアの仕事
ここまでで、Solidityエンジニアへの需要が増えているのは分かった。ただ実際にSolidityを学んでみたい、あるいはSolidityを学んでエンジニアになりたいと思った時に、どうすれば良いのだろうか。そこで、調べてみた。
具体的には、Solidityエンジニアの仕事内容、Solidityエンジニアに必要なスキル、Solidityを学ぶ難しさの3つだ。
もし自分はSolidityに興味はあるけど、勉強してみたいだけでエンジニアになりたいわけじゃない!という人はこの章は読み飛ばして大丈夫。次の章でSolidityの学び方を色々と紹介している。
Solidityエンジニアの仕事内容
Solidityエンジニアの仕事として、主にスマートコントラクトまたはDAppsの開発がある。これらを開発する上でやらなければいけないことに、以下がある。
- ブロックチェーンのソリューションアーキテクトにおけるクライアント要件の解釈
- スマートコントラクト開発プロジェクトの監督と参加
- 新しい機能の開発と、安定性、効率性、およびテストの改善による拡張
- さまざまなクライアントプラットフォーム間でのSolidityコードの統合
- ソリューションの技術レビューの評価
- 既存のアプリケーションとのブロックチェーン統合の保証
- スマートコントラクト開発に関する新しいアイデアを発見するための、プロダクトマネージャーや他チームとの連携
これらは全部一人で行うわけではもちろんなく、上司や同僚などと共にチームで取り組み、ポジションによって上の役割のいくつかを担う。
Solidityエンジニアに必要なスキル
Solidityエンジニアとして仕事をするために、最低限必要なスキルが3つある。技術的なスキル、サイバーセキュリティの知識、そしてブロックチェーンの知識だ。これらを身に付けた上で経験を積んでいくことで、Solidityエンジニアとしてのキャリアが磨かれていく。
1、技術的なスキル
Solidityエンジニアにとって、一般的なプログラミング言語とツールの基礎知識は必須。SolidityはC++、Python、JavaScript などの言語からも影響を受けているので、これらの言語を学んだことがある、あるいは学ぶことはSolidityを学ぶ上でも役に立つ。
2、サイバーセキュリティの知識
スマートコントラクトの情報には、大金や機密情報が含まれることがある。そこで、Solidityエンジニアは顧客のデータを保護するために、サイバーセキュリティの基礎を学ぶ必要がある。
3、ブロックチェーンの知識
これは言わずもがなだが、Solidityエンジニアはブロックチェーンの技術を十分に理解している必要がある。
Solidityの学び方
Solidityの学び方は3ステップある。
1、基礎から始める
まずは基礎としてSolidityとスマートコントラクトに関連する単純な概念や用語を学習する。
Web3.0の進化とブロックチェーンの基本、注目すべきブロックチェーンネットワーク、分散型アプリケーションの基本とその機能についての理解である。
これらの基礎を勉強している間に、フロントエンドやバックエンドのプログラミングスキルも磨き、同時にSolidityのドキュメントを見ながら、スマートコントラクト開発に役立つ機能を調べる。
2、技術に挑戦する
基礎を終えたら、次に技術に挑戦する。スマートコントラクトとイーサリアムヴァーチャルマシン(EVM)がSolidityでどのように連携するか、Solidity演算子と重要機能の提供方法、そして何よりも重要なのはSolidityの開発環境であるRemixについて学ぶことである。
RemixはSolidityコードの記述、コンパイル、およびデバッグに不可欠な要件だ。
3、信頼できる学習リソースを見つける
Solidityをしっかりと学ぶためにも信頼できる学習リソースを見つけることが大事だ。
そこで、すべてのトピックと概念の詳細な説明とその使用法の実際的な理解を備えたSolidityのトレーニングコースを探すのがよい。 また、自分で実際に手を動かしてSolidityを触ってみることも必要である。
ちなみにいつSolidityやスマートコントラクトを学習すれば良いのだろうか?
アメリカのヘッドハンターによると、週末や有給休暇を利用してSolidityのスキルを向上させる人が多いようで、「多くの候補者が自分の時間を使ってSolidityを学習したり、ブートキャンプに参加したりしている」。
コンピュータサイエンスや情報セキュリティ関連分野の学位がない限りは、専門科目の学習コースやプロフェッショナル認証はスマートコントラクトエンジニアになるのに有用である。
Solidityを学ぶ難しさ
Solidityエンジニアの仕事内容や必要なスキルが分かったところで、実際にエンジニアとして働けるようになるにはどれくらいかかるのか?そんな疑問に答えてくれるのが、Solidity Developer Surveyだ!
これはSolidityが毎年公式に行なっている世界中のSolidityエンジニア向けの調査で、これを見るとSolidityエンジニアがSolidityに対してどのように感じているかが分かるのだ。
ここでは2022年10月時点で最新版である2021年版の調査から、主な内容を紹介する。
1、仕事でプログラミングの経験はどれくらいありますか?
How many years have you coded professionally in any language?
Solidityエンジニアで一番多い仕事でのプログラミング経験は、3〜5年ほどだ。ただこれよりも少ない1〜2年や1年以下、さらには経験なしの人もそれなりにいる。
2、Solidityを使い始めてどれくらいですか?
How long have you been using Solidity?
Solidityエンジニアの約7割がSolidityを使い始めて1〜2年までだ。一番多いのは7〜12ヶ月の人で2割超。この質問では、Solidityを使い始めるまで別のプログラミング言語を使って仕事をしていた人も含まれるであろうものの、Solidityを長年経験している人がそこまで多くないのは、これから新しく学ぼうとする人にとっては希望が持てるはずだ。
3、Solidityを使い始めてどれくらいで生産的になりましたか?
How long did it take to become/feel productive with Solidity?
Solidityを使って生産的になる、すなわち開発できるようになるという意味だと勝手な推測にはなるが、調査結果で期間が割と均等にバラけていることから、本当に人によると思われる。今までのプログラミングやブロックチェーン経験も大事だが、実はSolidityに対しての学習能力やSolidityへの興味関心の強さが大事で、これらがある人は開発できるようになるのも早いのではないだろうか。
4、どのようにSolidityの最新情報を仕入れていますか?
How do you stay up to date about Solidity versions, security alerts, and announcements?
Solidityの最新情報はツイッター/マストドン、SolidityのブログやGithubから仕入れている人が圧倒的に多い。一方で、これらのことを何もしていない人もそこそこいる。もしかすると、Solidityの最新情報を仕入れ続けることで、少なくとも知識では先を行く一部の経験者に追いつけるかもしれない。
いかがだろうか。
Solidityエンジニアを仕事にするのは、新しく学ぶことが多い。
ただ、Solidity自体が新しいプログラミング言語であるため、他の言語に比べると今すでにエンジニアになっている人でも、経験が長い人がそこまで多くない。
もしSolidityエンジニアに興味があれば、挑戦してみると良いかもしれない。
Solidityを学べるコース
Solidityを実際にどこでどうやって学ぶか?
プログラミングスクールに行って学ぶほどお金もやる気もないし、学んだところでSolidityエンジニアになるかはまだ分からない。。。けど、どんなものか見てみたいし学んでみたい!
そう思っている人のために、Solidityをどうやって学ぶかをまとめた。
Solidityの学習方法
Solidityの学び方が分かっても実際に学ばないと意味がない。
そこで、Solidityが学べる学習ソースをまとめた。
ゲーム、YouTube、Udemy、Courseraの4つだ。
どれも参考になるので、自分が興味のあるものから始めてみてほしい。
1、ゲーム
ゲーム開発をしながら、あるいはゲーム感覚でSolidityを学べるウェブサイトがあるので、ここではそれらを紹介する。
・CryptoZombies
多くの人がおすすめしている、ゾンビブロックチェーンゲームを開発しながらSolidityを学べる優良オンラインコース。もちろん無料。それに、チュートリアルが日本語化されているのがありがたい。
前半では、アプリケーションの基本ブロックであるコントラクトの書き方や構造体、関数といった基本的な文法やアクセス制御などを学ぶ。後半では、外部のスマートコントラクトデータの利用、NFTの発行、WebのフロントエンドからスマートコントラクトにアクセスするためのJavaScriptライブラリーである、Web3.jsの使い方も学ぶ。
・The Ethernaut
The Ethernautは、OpenZeppelinが提供している、スマートコントラクトをハッキングするゲームである。ハッキングするということはスマートコントラクトの脆弱性を見つけることであり、このゲームを通して、逆説的にWeb3やSolidityとこれらのセキュリティについて学ぶことができる。
OpenZepplinとは?
OpenZepplinは、Ethereum上で安全なスマートコントラクトを実装するためのフレームワーク。
非常に多くの機能を備えており、中でもOwnableコントラクトという機能が最も使われている。
Ownableコントラクトを使うと、コントラクトを作った人にしか実行できない関数を作ることができるので、スマートコントラクトの管理が容易になる。
・Pet Shop
Pet Shopは、Truffleが提供しているペットショップのDapps開発を通してスマートコントラクトやDappsについて学べる、ゲーム感覚のチュートリアル。
Truffleとは?
Truffleは、スマートコントラクトのコードのコンパイル・リンク・デプロイ・バイナリ管理ができる、総合開発管理フレームワーク。
Remixとは?
Remixは、Solidityの統合開発環境(IDE)。Remixにはエディタが含まれているので、ブラウザ上でSolidityの実装テストが簡単に行えるのが特徴。コンパイルと仮想環境でのテストを一挙に行うことができるので、使いやすくおすすめである。
2、YouTube
YouTubeでもSolidityを学べる動画が色々ある。ここではそれらを紹介したい。
・ブロックアカデミー
Solidityのプログラミングを分かりやすく説明してくれている、唯一の日本語チャンネル。
実際にDappsを開発してみたいと思ったらみる動画
・Uniswap風のDEXを作る動画
先ほど紹介したブロックアカデミーの動画で、Uniswap風のDEXの開発を解説している。この動画を見つつ作ってみると、作れるはず。環境構築も解説している。
・スーパーチャットを作る動画
次に、チャットのDappsの作り方を解説している動画。 この動画を見ながら作ってみると大丈夫なはず。英語なので難易度は上がるが、やってみる価値はあり。
・Build and Deploy a Modern Web 3.0 Blockchain App | Solidity, Smart Contracts, Crypto
初心者向けにWeb3アプリをSolidityで開発する方法を説明している。3時間の超大作、かつ英語なので気合がある人は是非お試しあれ!この動画を理解できれば、ある程度技術力がついた証拠。個人開発もできるようになるだろう。
番外編:英語でWeb3やSolidityについて勉強してみたいと思ったら見る動画
・Dapp University
海外でEtheriumの解説などが分かりやすいと良く紹介されている、人気のWeb3関連のチャンネル。登録者50万人越え。最近の投稿は仮想通貨関連も多いが、Solidityなど技術についても解説している。
再生リスト:Master Solidity for Blockchain
・EatTheBlocks
BlockchainエンジニアがWeb3やSolidityについて解説しているチャンネル。再生リストを見るとSolidity関連もいくつかあり、一通り下に貼っておくので、良ければご覧ください。
再生リスト
▷▷Solidity Recipes
Solidityでどのようにコーディングして機能を作るかを解説している動画。
▷▷OpenZeppelin Tutorial
OpenZeppelinをどのように使うかを解説しているチュートリアル動画。
▷▷Solidity Tutorial
Solidityについて概要や開発・実装方法を解説しているチュートリアル動画。
▷▷Blockchain Career Advice
ブロックチェーンエンジニアについて、仕事内容やなるための方法、必要なスキルから実際にエンジニアとしてフリーランスの仕事やリモートワークの見つけ方、CVに必要な内容まで幅広く解説している動画。
・Finematics
Web3.0やブロックチェーンの専門用語やコンセプトについて、図解やイラストを使いながら解説しているチャンネル。上の2つのチャンネルとは違って、そもそもEtheriumとは何かやそれがどのような仕組みで動いているかを分かりやすく説明している。
3、【有料】Udemy
Udemy(ユーデミー)にはSolidityのコースがいくつかある。有料ではあるものの、体系立ててコースが作られているので学びやすい。
Udemy(ユーデミー)とは?
200,000以上の講座があるオンライン学習プラットフォーム。おもに社会人が対象で、教えたい人が講座を開き、学びたい人が学べるサイト。
動画コンテンツを用いたオンライン学習が基本。動画は無料もあるが、質の高い学習動画は基本有料である。ただ買切り型なので、購入後は時間や費用を気にせず自分の好きなタイミングで学習できる。
・【Web3.0アプリ開発入門】ReactとSolidity言語で簡単ブロックチェーンWebアプリ開発を体験してみよう!
React x SolidityでWebブロックチェーンWebアプリ開発を学べるコースである。
・Ethereum and Solidity: The Complete Developer’s Guide
Solidityの基本的な文法やスマートコントラクトの概念、考え方を学べるコースである。
英語にはなるものの日本語字幕があるため、抵抗がなければ安心である。
・Ethereum Blockchain Developer Bootcamp With Solidity (2022)
Etheriumエンジニアになるためのオンラインブートキャンプ。Solidity、Web3.JS、Truffle、Metamask、Remixなどが学べる。
教材内容は1万ドル、約140万円する個人ブートキャンプで使われているのと同じであるため、独学できる人にとっては良い教材になるかも!こちらも英語だけど日本語字幕があるため安心できる。
4、Coursera
Coursera(コーセラ)にもSolidityのコースがいくつかある。
質の高いオンラインコースを提供しており、自社のブログでSolidityエンジニアに必要なコースを紹介しており、それらが↓で書いているコースである。
どのコースも英語だが、世界的な大学との提携しているコースばかりなので、学びがいはすごくありそう。
Coursera(コーセラ)とは?
スタンフォード大学のアンドリュー・エン准教授とダフニー・コラー教授の2人によって設立された、オンライン教育プラットフォーム。スタンフォード大学、イェール大学、ミシガン大学など世界的に有名な大学が講座を提供している。日本の大学では、2013年に東京大学がCourseraに参加した。
275以上の世界的な大学や企業と提携して5,000以上の講座があり、コースを完了することで学位取得や履歴書に使えるロフェッショナル認証もある。多くのコースが無料だが、有料のものもある。
・技術を学ぶ:Learn to Program: The Fundamentals
Solidityと近い主要なプログラミング言語であるPythonの基礎を学ぶ。
・サイバーセキュリティを学ぶ:Decentralized Finance (DeFi) Opportunities and Risks
スマートコントラクトのセキュリティやデータセキュリティの基礎を学ぶ。
・Blockchainについて学ぶ:Blockchain: Foundations and Use Cases
スマートコントラクトの基礎となるブロックチェーンについて、テクノロジーとユースケースを学ぶ。
・暗号技術について学ぶ:Cryptography I
ブロックチェーンのセキュリティの要となる暗号化技術について学ぶ。
・DeFi (Decentralized finance) Infrastructure:Decentralized Finance (DeFi) Infrastructure
DeFiについて学ぶとともに、その仕組みにおけるスマートコントラクトやブロックチェーンの役割などについて学ぶ。
・DApps (Decentralized applications):Decentralized Applications (Dapps)
Dappsについて技術的な観点から学ぶ。
・スマートコントラクト:Smart Contract
スマートコントラクトの開発について学ぶ。Solidityも使用するので、Solidityについても実践的に学ぶことができる。
まとめ
以上Solidityを学ぶ方法を紹介したが、いかがだろうか。
2022年10月現在ではSolidityを扱えるエンジニアは限られているため、開発できるだけで案件に応募できる状況で、これから需要がさらに高まっていくことも予想される。
最近は仮想通貨も以前より価格が下がって盛り上がりに欠ける感があり、誰もが少し距離を取っている。ただ世界では店舗での支払い受付や銀行の入金を開始するなど、続々と仮想通貨の門戸が開かれており、皆が仮想通貨と距離を取っている今だからこそ、学んでいる人も少なく他の人と差をつけるチャンスだ!
別にエンジニアになるつもりではなくとも、知識を蓄えておくことで役に立つこともあるはずだ。少しでも興味を持ったら学んでみると、知識の幅を広げられるので、ぜひ試してみてほしい。
最後に、これはプログラミング全般に言えることだが、Solidityも含めてプログラミングは既存の知識に加えて、最新技術やトレンドの学習も必要だ。
技術やトレンドは常に変化しており、自分が陳腐化してしまうと置いていかれてしまうからだ。
それでもSolidityはまだ若く発展途上であり、これから新しい技術が公開されて進歩するため、今から始めれば決して遅くない。
コメント