source code management with pharo smalltalk - pharo smalltalkソースコード管理方法
TRANSCRIPT
Pharo Smalltalkソースコード管理方法 Source Code Management with Pharo
Sho Yoshida / @newappleshoSORABITO Co. Ltd.2 August 2015
この資料について
Pharo Smalltalkのソースコード管理方法を資料にまとめました
Henry Burrows https://www.flickr.com/photos/foilman/8015746124/
あのソースコード管理って どうやって作っているんですかえ!
ある日のSmalltalker同士の会話
Smalltalkのソースコード保管方法について
• 「分からないことはSmalltalkに聞け」というSmalltalk
• だからコメントやドキュメントをあまり残さないSmalltalker
• ドキュメントを見つけても古い
• 一体どうなっているんだ
ということで知っていることをまとめてみました
今回の範囲
• Smalltalkの処理系はたくさんあり管理方法もバラバラ
• Pharo Smalltalkについて説明します(下記は適当です。すみません)
20152010頃 2012頃 20142002?
Metacelloによる平定FileTreeの登場
Pharo3.0 Released FileTree標準装備
Pharo4.0 ReleasedMonticello(MCZ)の出現
Squeak Released
パッケージの導入??
2008
MCZの普及とリポジトリの乱立
GitHubの到来
1996?
Pharo Released
MCZ混沌時代の到来2013?
SmalltalkHub登場?Git出現
2005?
FileTree+GitHubでのパッケージ公開が増えてくるはず
Git管理願望時代?
GitHub Enterprise提供開始
Smalltalkと出会う
むかしむかし・・・ Once upon a time
でもそんな昔でないかも
paul bica https://www.flickr.com/photos/dexxus/5626316429/
Pharoの前身のSqueakでは
• パッケージ(ソースコード群)フォーマットとしてSAR形式があった
• SqueakMapというウェブベースのパッケージ管理でも使われている
• でも作るのは手作業で大変
詳しく知りたい方は「Squeak自由自在 http://swikis.ddo.jp/squeak/13」を参考にするとよいでしょう
http://map.squeak.org
Monticelloの出現
• MCZ形式のパッケージファイル管理ツール
• バージョン管理可能、差分確認が可能
• ローカルディレクトリおよびFTP, HTTP経由で外部にも保管可能
手動作成のSAR形式より楽で便利。 Squeak自由自在を読むと当時の期待感がわかる
MCZの普及とリポジトリの乱立
• MCZは普及しSqueak, Pharoではデフォルトのパッケージ管理となった
• MCZ形式のファイルを一般公開するためのリポジトリサーバーが登場
• SqueakSource,SqueakSource3や野良SqueakSourceが乱立した
どこに何がおいてあるのか不明。 Smalltalk入門者は主要なリポジトリを知らないと 欲しいパッケージが見つけられない可能性がある。
現在もこの問題は解決されていない Smalltalkだめ自慢 http://www.slideshare.net/umejava/smalltalk-38297600
MCZ混沌時代の到来
• MCZ形式は便利ではあったが欠点も多かった
• パッケージ間の依存関係解決が難しい(自分のパッケージに入れる荒技があったりヒドかった)
• 処理系、処理系のバージョンを指定できない(「動けばOK!」ってノリ。いいのか?)
• 最新化は職人技(「これだ!」ってな感じでMCZファイルを手動ロード)
私は学生の頃Smalltalkイメージ作り職人になっていたmario https://www.flickr.com/photos/64738468@N00/31049645/
Metacelloによる平定
• Monticelloの問題であったパッケージ依存や処理系ごとの制御を可能にするシステム
• Metacelloの登場によりパッケージ依存でエラーになることが少なくなった
• そしてイメージ作り職人は職を失ったはず(これが出た当初はSmalltalkとは無縁な仕事をしていたけどw)
よく見かけるConfigurationOfXX がMetacelloを記述するクラスMetacelloの使い方は第23回Smalltalk勉強会の資料を参考
http://www.smalltalk-users.jp/Home/gao-zhi/dai23kaismalltalkbenkyoukai
Always Shooting https://www.flickr.com/photos/alwaysshooting/15315019007/
GitHubの到来
• Metacelloが登場したころにはGitHubが広まりつつあった
• しかしながらSmalltalkerは独自ソースコード管理方法を続けた
• Metacello登場以降もプライベートなプロジェクト管理および多人数開発では問題を抱えていた
あの猫が怖かったのかもしれない
MCZでの運用の問題
• MCZ形式はソースコードをzip形式でアーカイブしたもの
• MCZファイルそのままをGitで管理しても嬉しくない
• プライベートなプロジェクトの場合SqueakSourceが必要になる
• ブランチ管理ができない
• Pull Requestが使えない
• ソースコードを見るためのSmalltalkがいつもあるとは限らない
Git使いたい
あの猫のサイトに公開したいGit管理願望時代の始まり
jessicahtam https://www.flickr.com/photos/jessicatam/4177468736/in/photostream/
git管理を憧れ続けたSmalltalkerの物語
FileTreeの登場
参考資料: http://www.slideshare.net/esug/of-metacello-git-scripting-and-things
FileTreeとはMonticello repository for directory-based Monticello packages enabling the use of git, svn, etc. for managing Smalltalk source code.
https://github.com/dalehenrich/filetree より
ソースコードをgit等で管理するための ディレクトリベースのソースコード管理ツール
発見したときPharo2.0に即座にインストールした
MCZだと・・・
Smalltalkがないと見えないよ
package class method properties
method source
FileTreeだと
見えるぞ、私にも見えるぞ
FileTreeとGit管理
見えるぞ、私にも見えるぞ
FileTreeのメリット
• ファイルベース管理なのでGit等の他言語のコード管理方法が利用可能
• プライベートSqueakSourceの導入が不要になり管理コスト減
• ブランチが使える
• Pull Requestが使える
• Pharo 3.0から標準装備
FileTreeの使い方(保存編)
• Monticello Browserを開き、保存したいパッケージを選択
• [+Repository]をクリック、[filetree://]を選択して保存するディレクトリを選択
• Monticelloと違いバージョン毎にソースコードが出力されないので注意(saveしたらgit,mercurial等でバージョン管理をする)
簡単ですね
FileTreeの使い方(読み込み編)
• 読み込む際にはBaselineをつかって読み込む
• BaselineはFileTreeで保存したパッケージ間依存を記述
• Metacelloの知識があれば簡単に記述可能
• Metacelloのbaseline:だけを取り出しものを考えるとわかりやすい
BaselineOfXX がBaselineを記述するクラス
Baselineの例
Baselineを使った読み込み
| pathToPackageDirectory | "edit to match the path to your chosen package directory" pathToPackageDirectory := '/YOUR-GIT-DIRECTORY-PATH/sendgrid-smalltalk/pharo-repository/'. Metacello new baseline: 'SendGrid'; repository: 'filetree://', pathToPackageDirectory; load.
SendGrid Smalltalkの場合 https://github.com/newapplesho/sendgrid-smalltalk
FileTree + Baseline + Git
• BaselineのコードもFileTreeで保存すればカレントブランチのソースコードが読み込める
• バージョン管理はGitに任せればOK
• ビジネスなどのプライベートプロジェクトの管理にはとても便利
SORABITOの場合
ConfigurationOf BaselineOf
プロジェクトに 必要な外部パッケージ読み込む 開発
base imageプロジェクトの
ソースコードを読み込み image完成
公式Pharo image
定期的に更新 随時外部パッケージを見極める必要があるため
作成には経験もしくは忍耐が必要(リポジトリ乱立問題) 各Smalltalkerに任せる
サーバーにデプロイするとき作ったイメージは必ず大事に保存しておくこと
+ +
image作成職人の復権?
これで無事解決したのだろうか• プライベートプロジェクト管理はほぼ解決したと思う
• 外部パッケージは依然としてMCZ管理が大半
• SmalltalkHubという新リポジトリもできてしまった
• あの猫サイトでパッケージ公開しても他と連携しないとSmalltalkerに発見されない可能性もある
Will https://www.flickr.com/photos/bongonian/8545465929/
Gitに憧れ三千里git管理を憧れ続けたSmalltalkerの物語の最終章
flowcomm https://www.flickr.com/photos/flowcomm/4372513286/
FileTreeはGitHubもサポート
• FileTreeにはGitHubに公開されたソースコードをcloneする機能ある
• 取得するソースコードはcommitの識別番号で指定可能
• ConfigurationOfのversionメソッドにgithubのパスを指定する
• 利用するにはBaselineにGit管理のパッケージの依存関係に記述してコミットする必要がある
• GitHubからcloneするConfigurationOfをSmalltalkHubなどに公開すれば乱立時代も乗り切れる
SendGrid Smalltalkの例
github://<user>/<project>[:SHA][/<path>] というルールになっている
SendGrid Smalltalkの例
github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository
GitHubから取得するConfigurationOfを利用
github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository
ローカルにGitHubのソースコードを取得する
SendGrid Smalltalkの例
ConfigurationOfのみSmalltalkHubに公開
FileTree + Git最高ですね
準備は整った さあSmalltalkを書こう
paul bica https://www.flickr.com/photos/dexxus/5820866907/