Pharo のプロジェクトを github に登録するまで

SqueakMap とか、SmalltalkHub とか、Smalltalk のプロジェクトを残す方法はいろいろあったけど、いまは github.com に残すのがナウい。

今年、立て続けに何個かプロジェクトを登録したけど、毎回忘れてしまうので備忘のために残しておく。

参考にしたサイトはこちら

前提

  • 自分の github アカウントが存在すること。
  • 登録するプロジェクトのパッケージが作ってあること。(この記事では MyProject とする)
  • travis でCIするなら、テスト用のパッケージも作っておく。(推奨、この記事では MyProject-Tests とする)

転ばぬ先の杖

何かのトラブルでせっかくのコードが失われないように、Monticello Browser でパッケージ(Testsパッケージも)を保存しておく。(方法は省略)

github.com での仕事

レポジトリの作成

github.com にログインして、新しいレポジトリを作る。

ギッハブで新たなレポジトリをつくる
  • Repository name は適当なものでよし。
  • Description は適当なものでよし。
  • 無料アカウントなので Public 一択。
  • Initialize this repository with a README はチェックを入れておく。
  • Add .gitignore では、Smalltalk を選ぶ。
  • Add a license では、適当なライセンスを選ぶ。(自分はいつも MIT License)
  • おわったら Create repository をクリックする。

レポジトリURLのコピー

出来上がったばかりのレポジトリが開かれたら、そのgithubアドレスをコピーする。

ギッハブのアドレスをコピーしておく

Code をクリックして、 Clone with SSH の下の欄の git@github.com: のテキストを全てコピーするか、その隣のアイコンをクリックする。

Pharo での仕事

Iceberg でローカルレポジトリを作る

Pharo を起動して Tools – Iceberg を選んで Iceberg を起動する。

Iceberg 画面

右上のAddをクリックする。

ギッハブのレポジトリを登録する
  • Clone remote repository を選ぶ。
  • Remote URL に、先ほどコピーしたgithubレポジトリのアドレスを貼り付ける。

このままOKを押すと、いま使っているイメージのあるフォルダの下にローカルレポジトリが作られる。PharoLauncher を使っていて、イメージごと削除するのがイヤな場合は、必要に応じて Local directory の場所を変えておく。

問題なければ OK を押す。

ローカルレポジトリに src フォルダを作成する

ソース群を格納するためのsrc フォルダを作る。

Iceberg で作成したばかりのレポジトリのエントリを右クリックし、Extra を選んで Inspect … をクリックする。

ローカルレポジトリにフォルダを作る

Inspector が現れたら Raw タブを押して、コードエリアに以下を入力して do it する。

(self location / 'src') ensureCreateDirectory
Smalltalkerは必要なければShellに降りない

特に問題が生じなければ、 Inspector を閉じて構わない。

Meta データを生成する

次にプロジェクトのメタデータを生成するために、再度レポジトリのエントリを右クリックして Repair repository を選ぶ。現れたダイアログで、Create project meta-data を選んで、OKを押すと、Edit Project のダイアログが現れる。

Code directory に先ほど作成した src フォルダが選ばれており、Format が Tonel になっていることを確認したら OK を押す。

BaselineOf パッケージを作る

パッケージの依存関係を明確にするために、BaselineOf クラスのサブクラスを作成する。作成したいパッケージが MyProject なら、以下のようにクラス定義する。

BaselineOf subclass: #BaselineOfMyProject
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'BaselineOfMyProject'

必要なインスタンスメソッドは2つで、1つ目は projectClass メソッドである。

projectClass
^ MetacelloCypressBaselineProject

もう一つは baseline: メソッドである。必要なパッケージに応じて内容を適宜修正する必要がある。他のパッケージを参考に依存関係を示せばよい。

baseline: spec
  spec
    for: #common
    do: [ spec
            package: 'MyProject';
            package: 'MyProject-Tests'
            with: [ spec requires: #('MyProject') ] ]

パッケージを追加する

最後に関係する全てのパッケージを追加する。レポジトリのエントリをダブルクリックして Working copy of のダイアログを表示し、右上の Add Packages ボタンでパッケージ(本体、テスト、BaselineOf)を全てチェックし、Add で追加する。(図のようにパッケージ名を入力して絞り込んで置くとラク)

パッケージを登録する

Commit + Push する

Iceberg の作業もほぼ終わり。Commit ボタンを押してコミット内容を確認して適当なコメントを書いたら、再度右下の Commit ボタンでコミット完了し、Push ボタンで github にプッシュする。

なお、下図のように Push changes to origin/main をチェックしておけば、コミットと同時にプッシュが行われる。

以上で github.com にパッケージがアップロードされた。

パッケージの内容を変更したときは、同様に Commit + Push すれば、その都度 github.com の内容も更新されていく。