Rubyライクな言語(1)Gobyを動かしてみる|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。Rubyライクな言語(1)Gobyを動かしてみるhachi8833シェアツイートブックマークLINEこんにちは、hachi8833です。今回から不定期で、Go言語だけで書かれたRubyライクな言語「Goby」について書きます。日本語で書かれた最初のGoby記事になると思います。serverやDBアダプタといった基本的なライブラリも装備していて、簡単なWebアプリ(https://sample.goby-lang.org/)やAPIを実際に書くことができます。コミット数は現時点で1800を超えています。imgur.comGobyはその名のとおりRubyから強く影響を受けていて、Rubyと同じ感覚で使えます。Goby実行系はGo言語だけで書かれている(CGOなどのC言語のコードは今のところ含まれていない)ので、C言語を知らないけど気軽に言語系をいじって遊んでみたい方にはぴったりだと思います。Gobyの最適化はこれからですが、その分Goby実行系のソースコードが読みやすいのもありがたい点です。Gobyを知ることでRubyを知るのにも役に立つと思いますし、少なくとも私はそう感じています。実際Gobyのcontributorの中には、Gobyで遊んだ後にRuby本体にパッチを投げた方もいます。Gobyの特徴については追って順にご紹介しますので、今回はまずGobyの動かし方をご紹介します。Gobyをどうとらえるかたとえとしてはとても大ざっぱで恐縮ですが、RubyがサッカーだとすればGobyはさしずめフットサルのようなものと自分は考えています(それならmrubyだよね?というツッコミがありそう...)。フットサルはオフサイドやスローインがないなどルールが若干異なっていますが、同じ感覚でプレーでき、さらに屋内でもプレーできます。何より、サッカーをやる人はいつでもフットサルも楽しむことができます。Gobyの目的の一つに「マイクロサービスやWebアプリを楽に書けるようにする」というのがあり、Gobyの仕様や標準ライブラリもその点を優先して整備が進められています。Gobyは、Rubyと完全に同じものにする予定は今のところないそうです。実際、明確な意図のもとに少し仕様を変えているところもあり、そうした点については今後の記事でご紹介します。書きましたが、要はGoby実行系のソースをいじるのは私にとって楽しいということです。imageを使う方法があります。Gobyインストール上のポイントは1つ、$GOBY_ROOTの設定です。この環境変数は、Gobyの標準ライブラリをrequireするときなどに必要です。Mac+Homebrew単に動かすのであれば、Macユーザーはhomebrewでインストールできます。この場合、$GOBY_ROOT環境変数も自動でセットアップされます。インストールの際は最新バージョンをご確認ください。gobygobyを実行して以下が表示されればインストール成功です。ソースからインストールGobyのGoソースをいじって楽しみたい方、Windows/Linuxの方は、Go言語の環境をセットアップしたうえでGobyのソースからコンパイルします。私はWindowsでGoを動かしたことがないので、ここではMacとLinuxで説明します。Go言語のセットアップGo言語が利用可能な方は1.をスキップできます。goでGo言語をインストールするのが楽です。Linuxの場合は以下でGo言語をインストールします。/usr/lib/go-1.9ここからはMac/Linux共通です。以下で$GOPATHと$GOROOT環境変数をセットアップし、$PATHも設定します。ここでは.bashrcに設定する前提ですが、必要があれば.bash_profileの方に設定します。Homebrewの場合を除き、$GOPATHは好きな場所に設定できます。~/goや~/.goに置かれることが多いようです。$GOPATHは後から変更すると問題が起きやすいので、一度設定したら変えないようにしましょう。versionを実行して以下のように表示されればGo言語のインストールは完了です。Gobyソースのインストールとコンパイル以下を実行してGobyソースをインストールします。実行はどのディレクトリにいても構いません。github.com/goby-lang/goby以下を実行してGobyの$GOBY_ROOT環境変数を設定します。installを実行します。installgobyを実行して以下が表示されればインストール成功です。imageもあります。Mac自体がどうしても動いてくれない(泣)ので、Homebrewで素のDockerをインストールして動かしました。Dockerのインストール方法は省略します。-iでインタラクティブモード(REPL)でGobyを使えます。実はREPLの多くは私が実装しました(repl.go)。resetでREPLをリセット、exitで終了できます。REPLでは、↑キーで履歴をさかのぼったりCtrl-Rで履歴マッチしたりもできます。いわゆるreadline的なことはひととおりできます。お遊びですがREPLを起動すると絵文字のfortuneが3つ表示されます。素のWindowsだと絵文字が化けたので、何とあのmattnさんがパッチを当ててWindowでfortuneを非表示にしてくれました。REPLのプロンプトは»、インデント中は¤、出力は#»が使われていますが、ターミナルからコピーして貼り付けると行冒頭の»と¤は自動で削除されるので、コードを楽にREPL上でコピペできます(下)。このままターミナルにコピペできます。駆け足紹介クラス名#methodsでメソッド一覧を表示、クラス名#ancestorsで継承パスを表示できます。クラス名#singleton_classで特異クラスを表示できます。moduleキーワードでモジュールを作成し、includeやextendできます。ARGV、STDIN、STDOUT、STDERR、ENVGobyのネイティブクラスGobyには現時点で以下のネイティブクラスがあります。Rubyでもお馴染みのクラスの他、Goby固有のクラスもあります。ネイティブクラスはほとんどがnewできない仕様です(ユーザーのクラスはnewできます)。エンコードは今のところUTF-8一択です(4バイトUTF-8対応)。Gobyの標準ライブラリGobyには、上の他にrequireで導入できる標準ライブラリもあります。ファイル名.gbでGobyスクリプトを実行できます。https://github.com/goby-lang/sample-web-app)Gobyスクリプトのサンプルとして、上のサンプルWebアプリのコードからmodel.gbも以下に転記してみました。してみるとRubyとほぼ同じ感覚ですね。highlightingがそのまま使えます。Guideline以下からGobyのSlackチャンネルにアクセスできます(英語のみ)。知りたいことなどや議論はこちらでどうぞ。goby-lang-slackin.herokuapp.comGobyのバグを見つけたらissueまでお願いします。Gobyにプルリクしたい方は以下のガイドラインをご覧ください。pushしてプルリクするという、通常のプルリク手順です。testを実行するとテストが走ります。このときPostgreSQLアダプタのテストも行われるので、ローカル環境でPostgreSQLをセットアップしておかないとテストを完了できません。postgresql-9.6でインストールしてください。PostgreSQLのインストール方法については省略します。テストを実行するには、postgresユーザーの権限でデータベースを作成できるようになっている必要があります。事情があって権限を与えられないといった場合は、事前にpsqlコマンドでgoby_testデータベースを作成しておきます。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。