読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

いろんな言語でmixi Graph APIのアクセスコードを書いてみました

platform

こんにちは。よういちろう です。いよいよ冬が迫ってきました。僕は冬のスポーツ、特にスキーが大好きーなので、白銀の世界に早く行きたくてたまりません。はぃ、僕は滑るのが得意なんです。いろんな意味で。

さて、もしかしたら「もう知ってるよ」という方も多いと思うのですが、mixi Graph APIを利用するためのコードのサンプル集をgithubにて公開しています。

[mixi-inc / mixi_graph_api_examples]

「mixiと言えばPerl」という印象が強いと思いますが、つい最近までPerlのサンプルコードはありませんでした。むしろ「Perl以外で!」と僕はエンジニアに言っていたくらいです。Perlを含め、この執筆時点で17の言語向けにサンプルコードが収められています。今まさにこの瞬間にも、誰かが新しい言語を使ってサンプルコードを書いている、かもしれません。

事の発端は?

mixi Platformで提供されている機能を利用するための技術的仕様は、mixi Developer Centerに掲載されています。mixiアプリPC版の公開以前から運用しているサイトですので、かれこれ3年が経とうとしています。

[サイトリニューアルのお知らせ(2008.12) - mixi Developer Center]

この3年間で数多くの機能をリリースし、mixi Developer Centerでの記載量もかなり多くなってきました。ページを追加するたびに、できるだけ開発者にとってわかりやすい内容になるようにと各執筆者は気にして文章を作ってきました。お褒めの言葉をいただくこともありとても嬉しい限りですが、残念ながら、

「サンプルコードをもっと増やしていただけませんか?」

というご指摘をいただくことも非常に多いのが現状です。そう、いくら日本語や英語で詳しく語ろうとも、すぐに動かして動作がわかるコードがあれば、プログラマはすぐにAPIを使い始めることができます。「百聞は一コードにしかず」ですね。

特に比較的新しい「mixi Graph API」について、より多くの開発者に利用していただきたいと願っています。そのためには、「試してみよう!」と思える何かが必要です。「一コード」を見て百聞を知ることができる何か、です。

さて、mixi Platformを利用しているサービスやアプリケーションは「HTTPやHTTPSによってAPIにアクセスできる環境で動作すること」が求められますが、それ以外に必須要素はありません。もちろん、言語についても制限はありません。開発者が普段慣れている言語を使うことができます。そのため、弊社に来る技術的問い合わせで登場する言語も様々です。PHPやJavaが多いですが、それらだけではないのです。

そして、弊社エンジニアの個人的興味もまたそれぞれです。Perlを仕事で書いているとはいえ、「好きな言語は?」と聞けば様々な答えが返ってきます。真剣に答える人もいれば、ネタとして面白い答えをする人もいます。

そんな各自の興味を逆手にとって、「自由に好きな言語でmixi Graph APIにアクセスするまでのコードを書かせてみたらきっとかなりの数の言語が揃うのではないか?」と思いついたのが8月末のことです。「9月末までに、何語でもいいので、Access token取得&People APIアクセスまでのコードを書いてきてください」、そう僕はメンバーに課しました。

その成果は・・・

なかなか誰も「書き終わりました!」と言ってこない中、自分が先陣を切りました。最初の言語は「Erlang」です。9月30日のことでした。そしてすぐに「golang」が続きました。「API使ってる開発者がいるのか?」とつい思ってしまっても仕方のない2つの言語で幕を切ったわけです。個人的には、すでにこれで満足でした。

その後「PHP」「Ruby」が公開されました。内心「あぁ、一般的な言語が来てしまった」と思ったのは言うまでもありません。きっと皆さんもそうお思いのことでしょう。しかし、これら日本で普及している言語向けのコードは非常に重要です。これは歓迎すべきことなのです。

そして次々と違う以下の言語向けのコードがリポジトリにコミットされていきました(アルファベット順)。

Bash, C, C++, Chrome(JS), Clojure, Erlang, golang, Haskell, Java, Objective C, Perl, PHP, Python, Ruby, Scala, VBA

分析してみよう

これだけ出そろったので、ちょっとした分析をしてみましょう。まず、コードの行数、つまり「どれだけサクッと書けたのか?」です。真面目に行数をカウントするのは面倒なので、Githubのコード表示ページ上の最終行の行数をここでは採用しています。グラフにすると、こうなります。完全に作者の腕に依存した行数なのと、コメント行や空行を含んだりしているので、精度は非常に荒いです。

Chromeは単純に.jsファイルのみの行数なので、本来であればHTMLも入れるべき?かもしれません(追い風参考記録、かな)。とにかくRubyの短さと、Cの長さが際立ってる印象ですね。Objective Cが意外と健闘しています。やはり、スクリプト言語というか、軽量と言われる言語がその行数は短く、硬く低レベルと言われる言語がその重さに比例して行数も長くなる傾向が見て取れます。「極限まで短くして書いて」とは一切伝えていませんので、一般的に記述される行数の目安、ということは言えると思います。

この行数の差は、冗長な記述の少なさ、という言語本来の特徴の他に、今回の要件である「HTTPS通信」「JSONのパース」といった処理を行うためのライブラリの存在有無も非常に大きな要因となっていると考えられます。

「行数だなんてナンセンスだ!こちとら括弧が多くて行数多く取っちゃうんだよ!」という言語があるとまずいと思い、全空行&全空白を除いた文字数もカウントしてみました。

Bashの躍進がすごいですね!Objective Cが下がり、Erlangが上がってきています。こちらの方が実態を示しているかもしれません。

ぜひPull requestを!

そんなこんなで公開したmixi Graph APIの各種サンプルコードですが、もっと世の中には言語があるはずであり、「○○言語使ってるのにサンプルがないなんて!」と苦い思いをされている方も多くいらっしゃるはずです。もし「まだなさそうだから作ってみた!」や「あまりにもサンプルとしていけてなさすぎじゃね?こう書くべきだろ!」という思いを既にお持ちの方々、ぜひPull requestを送ってください。

「本当は○○言語で書きたかったけど、SSLのライブラリないしなぁ」と二の足を踏んで結局着手してない言語があったりもします。そういった壁を軽く超えられる方からのPull requestをお待ちしております!

・・・ところで、9月〜10月にかけて公開したこれらのサンプルコードの中で、唯一問い合わせが来た言語があります。その名はなんと・・・

VBA