WebエンジニアのLoL日記

LoLをプレイしたりLJLの試合を見たりするのが好きなエンジニア。LoLのイベントやパッチノートなど気になった点を記事にしたり、LJLについの記事をかいたりしています。某社でWeb系のエンジニアとして働いているので、技術系の記事もたまに書きます。コンタクトを取りたい場合はtwitterまで。

【MasterCloud×ヒカ☆ラボ 】~Infrastructure as Code~ に参加してきました libspecinfra の話など

【MasterCloud×ヒカ☆ラボ】~Infrastructure as Code~ という以下の勉強会に参加してきました。

atnd.org

イベントについて

ヒカ☆ラボのイベントに今後参加する人もいるかもしれないので簡単にイベントの雰囲気をまとめていきます。

ヒカ☆ラボのイベントは規模が様々ですが、今回のイベントは募集が80人で、実際に集まったのは30人くらい、という感じの規模のイベントでした。もっと規模の大きなイベントもあるので、そのようなイベントではまた雰囲気も変わってくるとおもいます。*1

会場はイスのみが並べられただけの場所で、机はなし。電源もありませんでしたが、1時間半くらいの短い会だったのでPCの電池も持ちましたし、それほど苦ではありませんでした。

会場で着席したらまずお茶を配ってくれました。到着直後や、発表を聞いている途中に喉が乾いてきたりするはよくあるのでありがたかったです。

フリーWiFiはありました。ホワイトボードにパスワードが書いてあったのでそれを確認して接続する必要があります。アナウンスなどは無かったので、どこにWiFiの情報が書いてあるかは自分で見つける必要がありました。

発表

発表はいくつかありますが、今回は一つだけ簡単にまとめます。*2

libspecinfraの概要と現状と今後

speakerdeck.com

自己紹介

まず、Specinfra とは

libspecinfraをする前にSpecinfraを説明する

Specinfraとは、Ruby製のライブラリであり、OSやディストリビューションのコマンドの違いや、その他いろいろなことを抽象化して統一的に書けるようにしたものである。例えば、CentOSyumUbuntuapt-get の違いを意識する必要がなくなる。

もともとは Serverspec の一部機能だったものを切り出したのが Specinfra である。

例えば Cookpad が開発した Itamae というものがあるが、これは Specinfra を使っている。Chef や Ansible なんかはSpecinfraを使ってはいないが、Specinfraと似たような抽象化機能を独自に実装している。各種ライブラリでこの抽象化部分を実装するのは無駄であるが、Specinfraのようなものがあれば、そういった車輪の再発明的なことは防げる。

Specinfraの問題点

しかし、Specinfraの問題点としては、SpecinfraがRubyで実装されていることにある。先程itamaeはSpecinfraを使っていると述べたが、ItamaeはもちろんRubyを使っている。これに対して、mruby *3を使って実装されている MItamae というものもあるが、こちらは mruby を採用しているため(m'ruby' といってもRubyとは異なる言語なのだ)、Specinfraを利用することはできない。結局抽象化する層は独自実装していたりする。

そこで、Ruby以外からも利用できるようにしようという考えのもと作ったのがlibspecinfraだ

libspecinfra

github.com

libspecinfraは以下の2つからなる

  • libspecinfra本体(Rustで実装されている)
  • libspecinfraを各種言語から呼ぶためのライブラリ

libspecinfra本体は GitHub - libspecinfra/specinfra である。これはRustで実装されている。

そして、例えばlibspecinfraをpythonから使いたい場合は、libspecinfraをインストールした上で GitHub - libspecinfra/libspecinfra-python: Python bindings for libspecinfra を使ってpythonで呼ぶようなイメージだと思う。

何故Rustなのか

  • Cとの親和性の高さ
  • 個人的な興味から

libspecinfraの現状とか

libspecinfraの現状は以下のような感じである。まだまだ対応範囲がすくないのでもっと実装を進めていく必要がある。

  • FileとServiceの自動起動や停止あたりの実装が出来ている
  • 対応しているOSは以下の通り
  • 言語バインディングは以下が存在している(以下の言語から利用するためのライブラリが用意されている)

Specinfraはコントリビューターも多く、かなりのOSに対応しているが、それに比べるとlibspecinfra全然対応が進んでいない。もっと多くのOSに対応する必要があるのと、各言語バインディングの実装も進めていく必要がある。

協力者を募集中です

  • 各言語バインディングを実装してくれる人
  • 各OSを対応してくれる人
  • 単純にRustに詳しい人

などなど

Serverspec

Serverspec

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

*1:規模が大きくなるともっとごちゃごちゃしてくると思います

*2:全部まとめると長いので、他の発表は他の記事でまとめます。

*3:Rubyのミニマム版のようなもの