Skip to content
This repository has been archived by the owner on Mar 28, 2022. It is now read-only.
zunda edited this page Jan 31, 2013 · 31 revisions

このページはずんだコードのまとめです。

zundaは、ずんだコードで大変に楽しい思いをさせていただきました。 主催して、そして会場を手配してくださったkouさん、 現地やUstreamで参加してくださった皆さん、 きんつばを送ってくださった @muryoimplさん、 オライリーのどうぶつカレンダーを持ってきてくださった @finalfusionさん へのお礼を兼ねて、 このプロジェクトを始める上で疑問に感じたことと、 疑問によっては回答を、 このページにまとめておきます。

これからプロジェクトを始める皆さんの参考になりますように。 このページをより良くしてくださる編集を歓迎します。 そうそう、おいしいお菓子と飲み物もだいじですよね。

最初の一行をどこからどうやって書くか、欲しい機能のどこから書いていくか

今回は、 取ってきたJSONをパースするお試しコードがテストコードに進化しました。 次はプロダクトコードに移していくことになりそうです。

  • まずは仕上りのイメージを考える
  • まずはデータを取り扱うところから
  • 通信のところを先にやるか、ローカルを先にやるかも考えどころ

とか考えつつ、ライセンスを先に決めちゃいました。

ライセンスの記述やドキュメントなどの整備をどういうタイミングで進めるか

ライセンスは割と最初に決まりました。

  • フリーソフトウェアにしたいのでGPL系だよね。
  • MITでもいいけどね。
  • Web serviceじゃないのでAGPLじゃなくていいよね。
  • GPL Version 3だと、GPL Version 2のみのライブラリ等と一緒に配布できないよね。

というわけで、今回はGPL Version 2 or Laterということにしました。 GPL Version 2のライセンス文はコードと一緒に配布する必要があるので、 http://www.gnu.org/licenses/gpl-2.0.html から Plain text版をコピーしました。

ライセンス文はUbuntuの場合は /usr/share/common-licenses にもありそうです。

既存のライブラリの探し方

JSONはとりあえず Ruby 1.9 以上でrequire 'json'してみました。 あとはドキュメントを読まくちゃ。

あるURLから内容をgetするにはrequire 'open-uri'かな。 この辺は、経験を積んで感覚を磨いていくしかないでしょうか。

ライブラリの使い方

ドキュメントを読ながら、

  • irbで試す派
  • 書き捨てスクリプトに書いて試す派

Web service (API)を利用したプログラムの書き方 - テストをどう書くか

今回は、ローカルに持ってきたデータをいじりはじめることになりました。

JSONをヒアドキュメントとしてテストコード内に書いたところ、 パースエラーになってしまいました。 ヒアドキュメントの終端についての記述を<<'_END'のよう シングルクオートで囲んでも、うまくいかなかった。 ファイルに出力して読み込んだところ、期待通りパースしてくれるようになりました。

今回はURIがあまり変化しないこともあり必要なさそうですが、 APIのエンドポイントのURIの生成についてもテストしたい時には 悩みどころになりそうです。

gitとのおつきあい

addやcommitの粒度・タイミング

うまく動いたらcommitかな。 今回はgithubで見ていただきたくて、pushも頻繁にやりました。

ブランチ

  • ぽこぽこブランチを切ってあとで整理する派
  • trunk、devくらい派

2つのトピックについての編集を始めてしまった時などは工夫が必要ですよね。

gitのコミットメッセージの書き方

コードベースに振る舞いを変えるように命令する派が良さそうです。

zundaはこの形式のコミットメッセージを見て、自分が命令されているように思ってしまうので、 自分がやったことを主語を省略して過去形で書いとく派だったのですが、 git / Documentation / SubmittingPatches によると、命令されているのはコミットメッセージの読者ではなくてコードベースのようですね。

Describe your changes in imperative mood, e.g. "make xyzzy do frotz" instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy to do frotz", as if you are giving orders to the codebase to change its behaviour.

README.mdからファイルへのリンクのURLはどうするべき?

git cloneしてきたディレクトリの中と、 githubのプロジェクトページとでは、 gitで管理しているファイルへの相対パスが異なってしまいます。

今回は外部のサイトの絶対パスへの参照にしましたが、 そうも行かない場合もありますよね。 どうするのが良いでしょうか?

2013年1月30日から、README.mdなどの相対リンクがレポジトリ内のファイルへのリンクになるようになったようです。やってみる!

そのほかもろもろ

  • gistは「ジスト」?「ガイスト」?

ずんだコードのタイムライン

http://togetter.com/li/443123 と、 https://github.com/zunda/githubackup のコミットログ からまとめておきます。

まずは朝ご飯を食べながら準備を始めました。

10:09 Initial commit
10:18 Described first thoughts for #zundacode
10:53 Added a description about existing solutions
10:56 Fixed, hopefully, a markup for markdown
10:59 Added items I would like to learn
11:02 Added an item to be learned

そして本番。@zundan@ktouさんからの 紙コップ調達要請 を無視しちゃってましたね。すみません。 歩いてる時は寒くて端末見られなかったんです…。

13:39に開場 していただきました。

14:00ごろから始まって、 14:12には自己紹介 が進んでいました。

14:26ごろから作業を始めたようです。 まずどこから書くか、つぎにライセンスをどうするか。

14:39 Added a description of the license
14:45 Fixed URL for the GPL licese terms

14:48にコードを書きますよー、といいつつ、 APIの勉強に入りました。

JSONの解釈ができたのは40分くらいたってからですね。 この間には、ヒアドキュメントとして書いたJSONをパースできない、という 回り道も入っていました。

15:28 Successed in parsing the JSON data from GitHub $ curl https://api.github.com/users/zunda/repos > zudna-list

だんだんと感覚がわかってきて、テストコードを書きたくなってきました。

15:42 Starting to create a test code

テストコード中で、JSONから必要な情報のみを取ってこられるゆになったのが、 30分後くらい。

16:10 Now I can extract some properties from the JSON data

テストコードにユーザー所有のレポジトリに関するJOSNだけではなく、 Organizationのレポジトリに関するJOSNを加えたところで、 ずんだコードはお開きとなりました。

16:12 curl https://api.github.com/orgs/EdamameTech/repos > edamame-list.json
16:13 Moved a setting to setup method
16:23 Add a test to parse organization repositories
16:28 Wrap up

しらべたこと

GitHub APIのうち、レポジトリに関すること http://developer.github.com/v3/repos/

とってきたいレポジトリのユーザー名のリストと組織のリストを与える必要がある

ページネートされてる場合もある?

Status: 200 OK
Link: <https://api.github.com/resource?page=2>; rel="next",
      <https://api.github.com/resource?page=5>; rel="last"
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999