SlideShare a Scribd company logo
Smalltalkと継続的インテグレーション
Continuous Integration for Pharo Smalltalk
Sho Yoshida / @newapplesho

SORABITO Inc.

30 October 2015
本日のテーマ
継続的インテグレーション
ビルド、テストなどの定期的で反復可能な作業を自動化し
繰り返し実施することで省力化を図ること
継続的インテグレーションのメリット
継続的デリバリーの実現
継続的にデリバリーすることで顧客への価値の提供回数を増やす
Smalltalkerのみなさんへのアンケート
• ソースコードどうやって管理していますか
• imageビルドどうやっていますか
• 秘伝のイメージ作りをしていませんか
チーム開発について考えよう
Smalltalkのソースコード管理について
• 「分からないことはSmalltalkに聞け」というSmalltalk
• だからコメントやドキュメントをあまり残さないSmalltalker
• ドキュメントを見つけても古い
• 一体どうなっているんだ
ソースコード管理
• 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と出会う
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に憧れ三千里
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 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
• ビジネスなどのプライベートプロジェクトの管理にはとても便利
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での運用問題
• コードが細かく分割されているためコードレビューしずらい
• 常にproperties.jsonなどの生成されるためファイルのコンフリクトが発生し
やすい
FileTreeつらい。助けてSuper Smalltalker
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内のコードを実行することでimageを自動ビルド可能
builderの問題
でも動かない
慌てない。いつものこと
builder (newapplesho版)
• https://github.com/newapplesho/builder
• builder動かせるようにするように変更
• scriptsファイルは厳選したものだけをcommit
• 現状はCentOS 6用、今後はUbuntu等にも対応予定
• セットアップを簡単にできるシェルも準備中
Smalltalkのリポジトリ問題の解決を目指します
builder (newapplesho版)のディレクトリ構成
• oneclick CentOS 6.5用Pharo VMを格納
• images 自動ビルド
• scripts 自動ビルドで実行するコードを格納
builderの使い方
• gitコマンドでbuilderをクローン
• builderのimage内に最新のPharo imageを格納する
• シェル
git clone git://github.com/newapplesho/builder.git
build.sh -i [イメージ名] -s [script名] -o [出力イメージ名]
builderデモ
• builderでビルドしてみる
• builderの新規ビルドを作る
• builderで自動テストをしてみる
準備は整った
さあSmalltalkを書こう
paul bica https://www.flickr.com/photos/dexxus/5820866907/

More Related Content

PDF
Pharo(Smalltalk)でAPI作りをはじめよう
PDF
デザイナーにもできる再構築の高速化/負荷分散
PDF
サーバサイドエンジニアから見た MT構築のレガシーなノウハウ (入門編)
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PPTX
グラフデータベース入門
PPTX
Functional Programming in Scala #4-1
PDF
Spring Day 2016 springの現在過去未来
PDF
ソースコードレビューのススメ
Pharo(Smalltalk)でAPI作りをはじめよう
デザイナーにもできる再構築の高速化/負荷分散
サーバサイドエンジニアから見た MT構築のレガシーなノウハウ (入門編)
おっさんES6/ES2015,React.jsを学ぶ
グラフデータベース入門
Functional Programming in Scala #4-1
Spring Day 2016 springの現在過去未来
ソースコードレビューのススメ

What's hot (11)

PDF
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
PPTX
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
PDF
生粋のRubyistがJavaを好きになった理由
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
PPTX
あらためて考える、これからの仮想化インフラのためのデータセンター
PDF
Web Speech API で2時間で作れる?ブラウザロボット
PDF
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
PDF
楽天トラベルとSpring(Spring Day 2016)
PPTX
Chatopsのおかけでエンジニアがルーティンワークから解放された話
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
PDF
チケット管理システム大決戦第二弾
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
生粋のRubyistがJavaを好きになった理由
Swift事情2014夏 ~ Swift入門 beta6対応
あらためて考える、これからの仮想化インフラのためのデータセンター
Web Speech API で2時間で作れる?ブラウザロボット
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
楽天トラベルとSpring(Spring Day 2016)
Chatopsのおかけでエンジニアがルーティンワークから解放された話
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
チケット管理システム大決戦第二弾
Ad

More from Sho Yoshida (15)

PDF
OpenRestyを用いてイケイケなサービスを作る方法
PDF
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
PDF
今時なウェブ開発をSmalltalkでやってみる?
PDF
Elasticsearch for Pharo Smalltalk
PDF
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
PDF
RUNNING Smalltalk - 実践Smalltalk
PDF
AWS SDK for Smalltalk
PDF
How Smalltalker Works
PDF
Smaltalk驚異の開発(私が使い続ける2012年の話)
PDF
愛せよ、さもなくば捨てよ。
PDF
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
PDF
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
PDF
エコSmalltalk
PDF
今日から使おうSmalltalk
PDF
Iliad or Seaside
OpenRestyを用いてイケイケなサービスを作る方法
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
今時なウェブ開発をSmalltalkでやってみる?
Elasticsearch for Pharo Smalltalk
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
RUNNING Smalltalk - 実践Smalltalk
AWS SDK for Smalltalk
How Smalltalker Works
Smaltalk驚異の開発(私が使い続ける2012年の話)
愛せよ、さもなくば捨てよ。
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
エコSmalltalk
今日から使おうSmalltalk
Iliad or Seaside
Ad

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