source code management with pharo smalltalk - pharo smalltalkソースコード管理方法

34
Pharo Smalltalkソースコード管理方法 Source Code Management with Pharo Sho Yoshida / @newapplesho SORABITO Co. Ltd. 2 August 2015

Upload: sho-yoshida

Post on 17-Aug-2015

275 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Pharo Smalltalkソースコード管理方法 Source Code Management with Pharo

Sho Yoshida / @newappleshoSORABITO Co. Ltd.2 August 2015

Page 2: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

この資料について

Pharo Smalltalkのソースコード管理方法を資料にまとめました

Page 3: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Henry Burrows https://www.flickr.com/photos/foilman/8015746124/

あのソースコード管理って どうやって作っているんですかえ!

ある日のSmalltalker同士の会話

Page 4: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Smalltalkのソースコード保管方法について

• 「分からないことはSmalltalkに聞け」というSmalltalk

• だからコメントやドキュメントをあまり残さないSmalltalker

• ドキュメントを見つけても古い

• 一体どうなっているんだ

ということで知っていることをまとめてみました

Page 5: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

今回の範囲

• 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と出会う

Page 6: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

むかしむかし・・・ Once upon a time

でもそんな昔でないかも

paul bica https://www.flickr.com/photos/dexxus/5626316429/

Page 7: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Pharoの前身のSqueakでは

• パッケージ(ソースコード群)フォーマットとしてSAR形式があった

• SqueakMapというウェブベースのパッケージ管理でも使われている

• でも作るのは手作業で大変

詳しく知りたい方は「Squeak自由自在 http://swikis.ddo.jp/squeak/13」を参考にするとよいでしょう

http://map.squeak.org

Page 8: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Monticelloの出現

• MCZ形式のパッケージファイル管理ツール

• バージョン管理可能、差分確認が可能

• ローカルディレクトリおよびFTP, HTTP経由で外部にも保管可能

手動作成のSAR形式より楽で便利。 Squeak自由自在を読むと当時の期待感がわかる

Page 9: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

MCZの普及とリポジトリの乱立

• MCZは普及しSqueak, Pharoではデフォルトのパッケージ管理となった

• MCZ形式のファイルを一般公開するためのリポジトリサーバーが登場

• SqueakSource,SqueakSource3や野良SqueakSourceが乱立した

どこに何がおいてあるのか不明。 Smalltalk入門者は主要なリポジトリを知らないと 欲しいパッケージが見つけられない可能性がある。

現在もこの問題は解決されていない Smalltalkだめ自慢 http://www.slideshare.net/umejava/smalltalk-38297600

Page 10: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

MCZ混沌時代の到来

• MCZ形式は便利ではあったが欠点も多かった

• パッケージ間の依存関係解決が難しい(自分のパッケージに入れる荒技があったりヒドかった)

• 処理系、処理系のバージョンを指定できない(「動けばOK!」ってノリ。いいのか?)

• 最新化は職人技(「これだ!」ってな感じでMCZファイルを手動ロード)

私は学生の頃Smalltalkイメージ作り職人になっていたmario https://www.flickr.com/photos/64738468@N00/31049645/

Page 11: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

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/

Page 12: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

GitHubの到来

• Metacelloが登場したころにはGitHubが広まりつつあった

• しかしながらSmalltalkerは独自ソースコード管理方法を続けた

• Metacello登場以降もプライベートなプロジェクト管理および多人数開発では問題を抱えていた

あの猫が怖かったのかもしれない

Page 13: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

MCZでの運用の問題

• MCZ形式はソースコードをzip形式でアーカイブしたもの

• MCZファイルそのままをGitで管理しても嬉しくない

• プライベートなプロジェクトの場合SqueakSourceが必要になる

• ブランチ管理ができない

• Pull Requestが使えない

• ソースコードを見るためのSmalltalkがいつもあるとは限らない

Page 14: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Git使いたい

あの猫のサイトに公開したいGit管理願望時代の始まり

jessicahtam https://www.flickr.com/photos/jessicatam/4177468736/in/photostream/

git管理を憧れ続けたSmalltalkerの物語

Page 15: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

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に即座にインストールした

Page 16: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

MCZだと・・・

Smalltalkがないと見えないよ

Page 17: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

package class method properties

method source

FileTreeだと

見えるぞ、私にも見えるぞ

Page 18: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTreeとGit管理

見えるぞ、私にも見えるぞ

Page 19: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTreeのメリット

• ファイルベース管理なのでGit等の他言語のコード管理方法が利用可能

• プライベートSqueakSourceの導入が不要になり管理コスト減

• ブランチが使える

• Pull Requestが使える

• Pharo 3.0から標準装備

Page 20: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTreeの使い方(保存編)

• Monticello Browserを開き、保存したいパッケージを選択

• [+Repository]をクリック、[filetree://]を選択して保存するディレクトリを選択

• Monticelloと違いバージョン毎にソースコードが出力されないので注意(saveしたらgit,mercurial等でバージョン管理をする)

簡単ですね

Page 21: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTreeの使い方(読み込み編)

• 読み込む際にはBaselineをつかって読み込む

• BaselineはFileTreeで保存したパッケージ間依存を記述

• Metacelloの知識があれば簡単に記述可能

• Metacelloのbaseline:だけを取り出しものを考えるとわかりやすい

BaselineOfXX がBaselineを記述するクラス

Page 22: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Baselineの例

Page 23: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

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

Page 24: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTree + Baseline + Git

• BaselineのコードもFileTreeで保存すればカレントブランチのソースコードが読み込める

• バージョン管理はGitに任せればOK

• ビジネスなどのプライベートプロジェクトの管理にはとても便利

Page 25: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

SORABITOの場合

ConfigurationOf BaselineOf

プロジェクトに 必要な外部パッケージ読み込む 開発

base imageプロジェクトの

ソースコードを読み込み image完成

公式Pharo image

定期的に更新 随時外部パッケージを見極める必要があるため

作成には経験もしくは忍耐が必要(リポジトリ乱立問題) 各Smalltalkerに任せる

サーバーにデプロイするとき作ったイメージは必ず大事に保存しておくこと

+ +

image作成職人の復権?

Page 26: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

これで無事解決したのだろうか• プライベートプロジェクト管理はほぼ解決したと思う

• 外部パッケージは依然としてMCZ管理が大半

• SmalltalkHubという新リポジトリもできてしまった

• あの猫サイトでパッケージ公開しても他と連携しないとSmalltalkerに発見されない可能性もある

Will https://www.flickr.com/photos/bongonian/8545465929/

Page 27: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

Gitに憧れ三千里git管理を憧れ続けたSmalltalkerの物語の最終章

flowcomm https://www.flickr.com/photos/flowcomm/4372513286/

Page 28: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTreeはGitHubもサポート

• FileTreeにはGitHubに公開されたソースコードをcloneする機能ある

• 取得するソースコードはcommitの識別番号で指定可能

• ConfigurationOfのversionメソッドにgithubのパスを指定する

• 利用するにはBaselineにGit管理のパッケージの依存関係に記述してコミットする必要がある

• GitHubからcloneするConfigurationOfをSmalltalkHubなどに公開すれば乱立時代も乗り切れる

Page 29: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

SendGrid Smalltalkの例

github://<user>/<project>[:SHA][/<path>] というルールになっている

Page 30: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

SendGrid Smalltalkの例

github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository

Page 31: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

GitHubから取得するConfigurationOfを利用

github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository

ローカルにGitHubのソースコードを取得する

Page 32: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

SendGrid Smalltalkの例

ConfigurationOfのみSmalltalkHubに公開

Page 33: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

FileTree + Git最高ですね

Page 34: Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法

準備は整った さあSmalltalkを書こう

paul bica https://www.flickr.com/photos/dexxus/5820866907/