Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk
Sho Yoshida / @newapplesho

SORABITO Inc.

30 October 20...
本日のテーマ
継続的インテグレーション
ビルド、テストなどの定期的で反復可能な作業を自動化し
繰り返し実施することで省力化を図ること
継続的インテグレーションのメリット
継続的デリバリーの実現
継続的にデリバリーすることで顧客への価値の提供回数を増やす
Smalltalkerのみなさんへのアンケート
• ソースコードどうやって管理していますか
• imageビルドどうやっていますか
• 秘伝のイメージ作りをしていませんか
チーム開発について考えよう
Smalltalkのソースコード管理について
• 「分からないことはSmalltalkに聞け」というSmalltalk
• だからコメントやドキュメントをあまり残さないSmalltalker
• ドキュメントを見つけても古い
• 一体どうなって...
ソースコード管理
• Smalltalkの処理系はたくさんあり管理方法もバラバラ
• Pharo Smalltalkについて説明します(下記は適当です。すみません)
20152010頃 2012頃 20142002?
Metacelloによる平...
Pharoの前身のSqueakでは
• パッケージ(ソースコード群)フォーマットとしてSAR形式があった
• SqueakMapというウェブベースのパッケージ管理でも使われている
• でも作るのは手作業で大変
詳しく知りたい方は「Squeak自...
Monticelloの出現
• MCZ形式のパッケージファイル管理ツール
• バージョン管理可能、差分確認が可能
• ローカルディレクトリおよびFTP, HTTP経由で外部にも保管可能
手動作成のSAR形式より楽で便利。
Squeak自由自在を...
MCZの普及とリポジトリの乱立
• MCZは普及しSqueak, Pharoではデフォルトのパッケージ管理となった
• MCZ形式のファイルを一般公開するためのリポジトリサーバーが登場
• SqueakSource,SqueakSource3や...
MCZ混沌時代の到来
• MCZ形式は便利ではあったが欠点も多かった
• パッケージ間の依存関係解決が難しい(自分のパッケージに入れる荒技が
あったりヒドかった)
• 処理系、処理系のバージョンを指定できない(「動けばOK!」ってノリ。
いいの...
Metacelloによる平定
• Monticelloの問題であったパッケージ依存や処理系ごとの制御を可能にする
システム
• Metacelloの登場によりパッケージ依存でエラーになることが少なくなった
• そしてイメージ作り職人は職を失った...
GitHubの到来
• Metacelloが登場したころにはGitHubが広まりつつあった
• しかしながらSmalltalkerは独自ソースコード管理方法を続けた
• Metacello登場以降もプライベートなプロジェクト管理および多人数開発...
MCZでの運用の問題
• MCZ形式はソースコードをzip形式でアーカイブしたもの
• MCZファイルそのままをGitで管理しても嬉しくない
• プライベートなプロジェクトの場合SqueakSourceが必要になる
• ブランチ管理ができない
...
Git使いたい
Gitに憧れ三千里
Git管理を憧れ続けたSmalltalker
flowcomm https://www.flickr.com/photos/flowcomm/4372513286/
FileTreeの登場
参考資料: http://www.slideshare.net/esug/of-metacello-git-scripting-and-things
FileTreeとは
Monticello repository fo...
MCZだと・・・
Smalltalkがないと見えないよ
package class
method
properties
method
source
FileTreeだと
見えるぞ、私にも見えるぞ
FileTreeとGit管理
見えるぞ、私にも見えるぞ
FileTreeのメリット
• ファイルベース管理なのでGit等の他言語のコード管理方法が利用可能
• プライベートSqueakSourceの導入が不要になり管理コスト減
• ブランチが使える
• Pull Requestが使える
• Phar...
FileTreeの使い方(保存編)
• Monticello Browserを開き、保存したいパッケージを選択
• [+Repository]をクリック、[filetree://]を選択して保存するディレクトリを選択
• Monticelloと違...
FileTreeの使い方(読み込み編)
• 読み込む際にはBaselineをつかって読み込む
• BaselineはFileTreeで保存したパッケージ間依存を記述
• Metacelloの知識があれば簡単に記述可能
• Metacelloのb...
Baselineの例
Baselineを使った読み込み
| pathToPackageDirectory |
"edit to match the path to your chosen package directory"
pathToPackageDirecto...
FileTree + Baseline + Git
• BaselineのコードもFileTreeで保存すればカレントブランチのソースコードが
読み込める
• バージョン管理はGitに任せればOK
• ビジネスなどのプライベートプロジェクトの管...
FileTreeはGitHubもサポート
• FileTreeにはGitHubに公開されたソースコードをcloneする機能ある
• 取得するソースコードはcommitの識別番号で指定可能
• ConfigurationOfのversionメソッド...
SendGrid Smalltalkの例
github://<user>/<project>[:SHA][/<path>] というルールになっている
SendGrid Smalltalkの例
github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository
GitHubから取得するConfigurationOfを利用
github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repos...
SendGrid Smalltalkの例
ConfigurationOfのみSmalltalkHubに公開
FileTreeでの運用問題
• コードが細かく分割されているためコードレビューしずらい
• 常にproperties.jsonなどの生成されるためファイルのコンフリクトが発生し
やすい
FileTreeつらい。助けてSuper Smallta...
Stree
• 梅澤さん(@umejava)作 FileTreeの拡張機能
• http://smalltalkhub.com/#!/~MasashiUmezawa/STree
• Cypressとは異なりクラス単位でファイルが分割されている
...
Streeのinstall方法
Gofer it
url: 'http://smalltalkhub.com/mc/MasashiUmezawa/STree/main';
package: 'STree';
load.
FileTreeとStreeの比較
FileTreeとStreeの比較
builder
• Pharo imageをJenkinsを用いて自動ビルドする環境
• Lukas Rengglis作
• https://github.com/renggli/builder
• scripts内のコードを実行することでim...
builderの問題
でも動かない
慌てない。いつものこと
builder (newapplesho版)
• https://github.com/newapplesho/builder
• builder動かせるようにするように変更
• scriptsファイルは厳選したものだけをcommit
• 現状...
builder (newapplesho版)のディレクトリ構成
• oneclick CentOS 6.5用Pharo VMを格納
• images 自動ビルド
• scripts 自動ビルドで実行するコードを格納
builderの使い方
• gitコマンドでbuilderをクローン
• builderのimage内に最新のPharo imageを格納する
• シェル
git clone git://github.com/newapplesho/build...
builderデモ
• builderでビルドしてみる
• builderの新規ビルドを作る
• builderで自動テストをしてみる
準備は整った
さあSmalltalkを書こう
paul bica https://www.flickr.com/photos/dexxus/5820866907/
Upcoming SlideShare
Loading in …5
×

Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション

1,156 views

Published on

Smalltalkと継続的インテグレーション

Published in: Technology
  • Be the first to comment

Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション

  1. 1. Smalltalkと継続的インテグレーション Continuous Integration for Pharo Smalltalk Sho Yoshida / @newapplesho SORABITO Inc. 30 October 2015
  2. 2. 本日のテーマ 継続的インテグレーション ビルド、テストなどの定期的で反復可能な作業を自動化し 繰り返し実施することで省力化を図ること
  3. 3. 継続的インテグレーションのメリット 継続的デリバリーの実現 継続的にデリバリーすることで顧客への価値の提供回数を増やす
  4. 4. Smalltalkerのみなさんへのアンケート • ソースコードどうやって管理していますか • imageビルドどうやっていますか • 秘伝のイメージ作りをしていませんか チーム開発について考えよう
  5. 5. Smalltalkのソースコード管理について • 「分からないことはSmalltalkに聞け」というSmalltalk • だからコメントやドキュメントをあまり残さないSmalltalker • ドキュメントを見つけても古い • 一体どうなっているんだ
  6. 6. ソースコード管理 • Smalltalkの処理系はたくさんあり管理方法もバラバラ • Pharo Smalltalkについて説明します(下記は適当です。すみません) 20152010頃 2012頃 20142002? Metacelloによる平定 FileTreeの登場 Pharo3.0 Released FileTree標準装備 Pharo4.0 Released Monticello(MCZ)の出現 Squeak Released パッケージの導入?? 2008 MCZの普及とリポジトリの乱立 GitHubの到来 1996? Pharo Released MCZ混沌時代の到来 2013? SmalltalkHub登場? Git出現 2005? FileTree+GitHubでのパッケージ公開が増えてくるはず Git管理願望時代? GitHub Enterprise提供開始 Smalltalkと出会う
  7. 7. Pharoの前身のSqueakでは • パッケージ(ソースコード群)フォーマットとしてSAR形式があった • SqueakMapというウェブベースのパッケージ管理でも使われている • でも作るのは手作業で大変 詳しく知りたい方は「Squeak自由自在 http://swikis.ddo.jp/squeak/13」を参考にするとよいでしょう http://map.squeak.org
  8. 8. Monticelloの出現 • MCZ形式のパッケージファイル管理ツール • バージョン管理可能、差分確認が可能 • ローカルディレクトリおよびFTP, HTTP経由で外部にも保管可能 手動作成のSAR形式より楽で便利。 Squeak自由自在を読むと当時の期待感がわかる
  9. 9. MCZの普及とリポジトリの乱立 • MCZは普及しSqueak, Pharoではデフォルトのパッケージ管理となった • MCZ形式のファイルを一般公開するためのリポジトリサーバーが登場 • SqueakSource,SqueakSource3や野良SqueakSourceが乱立した どこに何がおいてあるのか不明。 Smalltalk入門者は主要なリポジトリを知らないと 欲しいパッケージが見つけられない可能性がある。 現在もこの問題は解決されていない Smalltalkだめ自慢 http://www.slideshare.net/umejava/smalltalk-38297600
  10. 10. MCZ混沌時代の到来 • MCZ形式は便利ではあったが欠点も多かった • パッケージ間の依存関係解決が難しい(自分のパッケージに入れる荒技が あったりヒドかった) • 処理系、処理系のバージョンを指定できない(「動けばOK!」ってノリ。 いいのか?) • 最新化は職人技(「これだ!」ってな感じでMCZファイルを手動ロード) 私は学生の頃Smalltalkイメージ作り職人になっていた mario https://www.flickr.com/photos/64738468@N00/31049645/
  11. 11. 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/
  12. 12. GitHubの到来 • Metacelloが登場したころにはGitHubが広まりつつあった • しかしながらSmalltalkerは独自ソースコード管理方法を続けた • Metacello登場以降もプライベートなプロジェクト管理および多人数開発で は問題を抱えていた • あの猫がこわかったのかもしれない
  13. 13. MCZでの運用の問題 • MCZ形式はソースコードをzip形式でアーカイブしたもの • MCZファイルそのままをGitで管理しても嬉しくない • プライベートなプロジェクトの場合SqueakSourceが必要になる • ブランチ管理ができない • Pull Requestが使えない • ソースコードを見るためのSmalltalkがいつもあるとは限らない
  14. 14. Git使いたい Gitに憧れ三千里 Git管理を憧れ続けたSmalltalker flowcomm https://www.flickr.com/photos/flowcomm/4372513286/
  15. 15. 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に即座にインストールした
  16. 16. MCZだと・・・ Smalltalkがないと見えないよ
  17. 17. package class method properties method source FileTreeだと 見えるぞ、私にも見えるぞ
  18. 18. FileTreeとGit管理 見えるぞ、私にも見えるぞ
  19. 19. FileTreeのメリット • ファイルベース管理なのでGit等の他言語のコード管理方法が利用可能 • プライベートSqueakSourceの導入が不要になり管理コスト減 • ブランチが使える • Pull Requestが使える • Pharo 3.0から標準装備
  20. 20. FileTreeの使い方(保存編) • Monticello Browserを開き、保存したいパッケージを選択 • [+Repository]をクリック、[filetree://]を選択して保存するディレクトリを選択 • Monticelloと違いバージョン毎にソースコードが出力されないので注意 (saveしたらgit,mercurial等でバージョン管理をする) 簡単ですね
  21. 21. FileTreeの使い方(読み込み編) • 読み込む際にはBaselineをつかって読み込む • BaselineはFileTreeで保存したパッケージ間依存を記述 • Metacelloの知識があれば簡単に記述可能 • Metacelloのbaseline:だけを取り出しものを考えるとわかりやすい BaselineOfXX がBaselineを記述するクラス
  22. 22. Baselineの例
  23. 23. 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
  24. 24. FileTree + Baseline + Git • BaselineのコードもFileTreeで保存すればカレントブランチのソースコードが 読み込める • バージョン管理はGitに任せればOK • ビジネスなどのプライベートプロジェクトの管理にはとても便利
  25. 25. FileTreeはGitHubもサポート • FileTreeにはGitHubに公開されたソースコードをcloneする機能ある • 取得するソースコードはcommitの識別番号で指定可能 • ConfigurationOfのversionメソッドにgithubのパスを指定する • 利用するにはBaselineにGit管理のパッケージの依存関係に記述してコミットする 必要がある • GitHubからcloneするConfigurationOfをSmalltalkHubなどに公開すれば乱立時代 も乗り切れる
  26. 26. SendGrid Smalltalkの例 github://<user>/<project>[:SHA][/<path>] というルールになっている
  27. 27. SendGrid Smalltalkの例 github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository
  28. 28. GitHubから取得するConfigurationOfを利用 github://newapplesho/sendgrid-smalltalk:ce676f2225374264108042c4c734fe116b3c5080/pharo-repository ローカルにGitHubのソースコードを取得する
  29. 29. SendGrid Smalltalkの例 ConfigurationOfのみSmalltalkHubに公開
  30. 30. FileTreeでの運用問題 • コードが細かく分割されているためコードレビューしずらい • 常にproperties.jsonなどの生成されるためファイルのコンフリクトが発生し やすい FileTreeつらい。助けてSuper Smalltalker
  31. 31. Stree • 梅澤さん(@umejava)作 FileTreeの拡張機能 • http://smalltalkhub.com/#!/~MasashiUmezawa/STree • Cypressとは異なりクラス単位でファイルが分割されている • クラス単位のファイル出力でも出力順序が統一されているためコードレビュー がしやすい
  32. 32. Streeのinstall方法 Gofer it url: 'http://smalltalkhub.com/mc/MasashiUmezawa/STree/main'; package: 'STree'; load.
  33. 33. FileTreeとStreeの比較
  34. 34. FileTreeとStreeの比較
  35. 35. builder • Pharo imageをJenkinsを用いて自動ビルドする環境 • Lukas Rengglis作 • https://github.com/renggli/builder • scripts内のコードを実行することでimageを自動ビルド可能
  36. 36. builderの問題 でも動かない 慌てない。いつものこと
  37. 37. builder (newapplesho版) • https://github.com/newapplesho/builder • builder動かせるようにするように変更 • scriptsファイルは厳選したものだけをcommit • 現状はCentOS 6用、今後はUbuntu等にも対応予定 • セットアップを簡単にできるシェルも準備中 Smalltalkのリポジトリ問題の解決を目指します
  38. 38. builder (newapplesho版)のディレクトリ構成 • oneclick CentOS 6.5用Pharo VMを格納 • images 自動ビルド • scripts 自動ビルドで実行するコードを格納
  39. 39. builderの使い方 • gitコマンドでbuilderをクローン • builderのimage内に最新のPharo imageを格納する • シェル git clone git://github.com/newapplesho/builder.git build.sh -i [イメージ名] -s [script名] -o [出力イメージ名]
  40. 40. builderデモ • builderでビルドしてみる • builderの新規ビルドを作る • builderで自動テストをしてみる
  41. 41. 準備は整った さあSmalltalkを書こう paul bica https://www.flickr.com/photos/dexxus/5820866907/

×