インターネットコンピューターで使えるプログラミング言語

  • ブロックチェーンでプログラムを動かしたい
  • どうせプログラムを勉強するならブロックチェーンで

このようにお考えの方向けの記事です。

ブロックチェーンの一つ、インターネットコンピューターでプログラムを動かすのに必要な開発言語について紹介します。

対応する言語と大雑把な仕組みをつかむことができる内容となっています。それではどうぞ。

インターネットコンピューターで使えるプログラミング言語

インターネットコンピューターは、雑に言うとブロックチェーン技術によるクラウドサービスです。ブロックチェーン上にプログラムを置けば、それだけで動かすことができます。

基本はWebサーバーをイメージするのが良いでしょう。フロントエンドとバックエンドに分かれていて、現状のWebサービスと同じように開発していくことになります。フロントエンドは静的コンテンツがメイン、バックエンドはサーバーに相当し計算処理が可能です。

フロントエンド【html/js/css】

インターネットコンピューターのフロントエンドで使用できる言語はhtml/js/css

Webサーバー機能を備えている

言語以外にもjpegなど画像やだとかpdfだとかも配置できます。

つまり、一般的なWebコンテンツは全部OK。

プログラム経験なしでもインターネットコンピューターを使用できるのは、このWebの基本的な3種類の言語を使用できるのが大きいです。

nodeつかえばさらに対応言語が増える

html/js/cssに最終的になりさえすれば良いので、nodeを使えばTypsecriptやLess,Sussも利用できます。

フロントエンドだけでスマートコントラクトも可能

ブロックチェーンで動かすプログラムが可能にしたスマートコントラクト。他の開発者が作ったスマートコントラクトを利用することで、フロントエンドだけでもアプリの構築ができます。

インターネットコンピューターではスマートコントラクトを行うためのインターフェース(candid)があり、それはjavascriptを介して使用します。つまり自分で計算処理をするスマートコントラクトを書かなくても、人の作ったスマートコントラクトでWebアプリケーションを作成できるということです。

バックエンドで使える2つの言語

とはいえ、人のコードではできることが限られてくるので、自分でもスマートコントラクトを開発したくなると思います。インターネットコンピューターにおいてクラウドのサーバーに相当するものはキャニスターと呼ばれます(前段のフロントエンドもキャニスターの一種ではあります)。このキャニスターでうごくプログラムはWebAssemblyです。

要は、WebAssemblyにコンパイルできる言語であれば、インターネットコンピューターでプログラミングができるのですけれども、ただ現時点でサポート対象となっているのは2つの言語です。

Motoko

Motokoはインターネットコンピューターのために開発された言語です。 Web assembly にコンパイルする言語というものは、難易度が高い言語が多いです。それでは敷居が高くなってしまうため誰でも手軽にコーディングできるように用意されたのがMotokoです

余談ですが言語のキャラクターもデザイン(上画像)されておりインターネットコンピューターのイベントで NFT として配布されました。

Rust

Rustもまたインターネットコンピューターで開発ができる言語です。

実用的で人気のある言語

2010年代に登場した新しい言語であり、開発者に愛される言語としても有名で、ツイッター創設者ジャックドーシーのお気に入りですね。

Firefoxなどで有名なMozillaが開発したこの言語は、新しいながらも実績は十分でMicrosoft、Google、Amazon、Metaと巨大テックに採用され製品やサービスに組み込まれています。

インターネットコンピューターでもコア機能やサービスがRustで書かれているもの(インターネットアイデンティティとか)が多いです。

難易度お高め

かなり注目の言語ではある一方で、難点としてRustは難しい言語であるという側面を持ちます。

もちろん相対的な話です。難易度でいうとWebエンジニアに慣れ親しまれているJavascript/Ruby/PHP/Pythonというよりは、C/C++に近く、習得までに時間がかかります。

なので、C/C++を使用中のエンジニアがRustを使うと感動するという話を見かける一方で、Webサイドからは難しいという話が目に付く印象です。

比較的難しいとされるRustがインターネットコンピューターでサポートされている理由は、Mozillaによって同じく作られたWebAssemblyに対応できる言語だからです。親和性高め。

どっち使う?

さてさて、どちらを使えばよいのか。ちょっと悩んでしまいますよね。いくつか切り口があると思うのでふれていきましょう。

ドキュメントの充実度

ドキュメントの充実度は古い言語であるRustに軍配が上がります。それにMotokoと比べると長らく使われてきているため、主だったトラブルの解決策はネットに落ちています。

それに最近では日本語のドキュメントがかなり充実しています。偉大な先人たちに感謝。

ドキュメントの充実度という点では、Motokoは生まれて間もないため、どうしても見劣りをしてしまいます。

立ちはだかる英語

共通の障壁となるのは英語でしょうか。RustにしろMotokoにしろインターネットコンピューターを使うには英語が必要です。Rustであっても「インターネットコンピューターで動かす」この一点だけでは英語のドキュメントがほとんどです。避けられません。

ですが、翻訳性能がどんどん上がっているため、Google翻訳をうまく活用すればほとんど苦も無く読めます。Web2のサービス万歳。

使っていきましょう!

ライブラリの充実度

ライブラリの充実度でもRustに軍配があがります。ドキュメントと同じく一日の長ありです。

複雑な処理をしようとしたとき、Rustならばライブラリ利用ですぐにプログラムを完成までもっていけるところを、Motokoでは自前で作りこんでいくことになります。

難易度と実用性のトレードオフ

どちらの言語でプログラミングをするかは目的によると思いますが、簡単にまとめてみます。

  • Motoko→簡単
  • Rust→難しい・実用的

Rustは汎用性が高いため、自身のスキルアップや就職などの実用面を考えていくと、Rustを選ぶことになりそうです。

  • ドキュメント充実
  • ライブラリ充実
  • 組み込み系対応可能
  • WebAssembly対応可能(IC以外でも)

ただし難しい

ガーベッジコレクションがないというユニークな特徴があるため、まっさらな状態から学習するのであれば違和感ないかもしれませんが、多少Web系のプログラミング経験がある人でも、それなりに詰まる可能性があります。

一方、Motokoはインターネットコンピューターでしか使用できないという応用性に欠点がありますが、非常に簡単にスマートコントラクトを書けるという最大のメリットをもちます。

単純なプログラムでブロックチェーンでプログラムを動かすならMotokoを選ぶと良いでしょう。

実用的で簡単なのは今後登場する可能性あり

Motokoほど簡単でなくてとRustくらい実用的な言語はないものか・・・そうお考えの方にちょっとした朗報です。別の言語が今後インターネットコンピューターに登場する可能性のお話です。

インターネットコンピューターは既存Webエンジニアと相性はいまいち

すでにインターネットコンピューターに触れている人の中には、RustとMotokoだけでいいのかと疑問に思う人が少なからずいらっしゃいます。

これは他のブロックチェーンプロジェクトにも言えるですが、ブロックチェーンを使うにあたり言語の敷居が高いことが問題になっています。ブロックチェーン界隈ではRustをはじめHaskellやSolidityといった大多数のWebエンジニアが使ったことがない言語がでてくることもあり、「既存のWebエンジニアたちは移行してくれるのだろうか?」という懸念があるためです。

インターネットコンピューターも同様ですね。

Demergent Labsの取り組み

そこで、既存のWebエンジニアがインターネットコンピューターに移行しやすいように、Typescriptでコーディングできるようにという試みがDemergent Labsによって進行中です。このCDKが出来上がれば、フロントエンドだけでなくバックエンドもTypescriptが使えます。

>> Demergent Labs: TypeScript, GraphQL, and Python on the Internet Computer

加えて、Phythonについても言及されています。PhythonもまたWebエンジニアにとって使用率の高い言語のひとつですね。ゆえに、この2つの言語がインターネットコンピューターにもたらされれば、一気にエンジニアの数を増やすこともあり得ます。

オープンソースをトークン化するという面白い取り組みも行われているので、気になる方はGithubを覗いてみてください。

インターネットコンピューターの開発ドキュメント

インターネットコンピューターに興味がある方向けに、ドキュメントのURLをおいておきます。

ドキュメント

https://smartcontracts.org/docs/

サンプル

https://smartcontracts.org/docs/samples/index.html

まとめ

それでは最後にまとめます。

  • フロントエンドは一般的なwebと同じhtml/javascript/css
  • バックエンドはRustとMotokoが使用可能
  • 手軽にはじめるならMotokoがおすすめ
  • 今後バックエンドでもTypescriptとPhythonが使用できるようになる可能性あり

本ブログでもインターネットコンピューターを使ったサンプルや関連記事がありますので他の記事もみていただけたらうれしいです。