continuous integration for pharo smalltalk - smalltalkと継続的インテグレーション

41
Smalltalkと継続的インテグレーション Continuous Integration for Pharo Smalltalk Sho Yoshida / @newapplesho SORABITO Inc. 30 October 2015

Upload: sho-yoshida

Post on 13-Apr-2017

889 views

Category:

Technology


5 download

TRANSCRIPT

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

Sho Yoshida / @newappleshoSORABITO Inc.30 October 2015

本日のテーマ

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

ビルド、テストなどの定期的で反復可能な作業を自動化し 繰り返し実施することで省力化を図ること

継続的インテグレーションのメリット

継続的デリバリーの実現継続的にデリバリーすることで顧客への価値の提供回数を増やす

Smalltalkerのみなさんへのアンケート

• ソースコードどうやって管理していますか

• imageビルドどうやっていますか

• 秘伝のイメージ作りをしていませんか

チーム開発について考えよう

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

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/