Brewfileとbrew-caskとを使ってのMacのセットアップ
Macの初期セットアップをするにはBoxen使うよりもBrewfileとHomebrew-cask使うのが良いかと思います。
現時点ではこの方法が一番だと個人的には思っております。
BrewfileとHomebrew-caskについての記事はいろいろな方が書かれているので詳細はそちらを参照して下さい。
Boxenはなぜダメなのか?
Boxenが全然イケてないよという訳ではありません。上で上げた記事でもみなさん述べているのですが、Boxenは大掛かりすぎるのですよね。最初はBoxen使えば個人的にMac買い替えた時に便利だなーとか、みんなの環境揃えられるかなーと思ってちょっと調べていたのですがいろいろ面倒くさい。
あと、なんやかんやでPuppet覚えないといけないのもちょっと。Boxen触り始めて初めてPuppetを触り始めたのですが最初ちょっと辛かった。まあ慣れてしまえばどうってことないのですが。この最初の敷居がチーム内に浸透させにくそうだと感じました。
そして一番の原因が自分の環境がイマイチよく分からなくなること。Boxenの動きをきちんと理解すれば問題ないのでしょうが、rbenvとかもろもろ勝手に入れられてしまうのでなにがどこにあるのか私的には分からなくなりました。
そんなこともあり、結局仮想マシン上のOS Xでいろいろと試行錯誤しましたが結局使うことをやめました。
(ここが結構大事なところで私はチキンなのでいきなりローカル環境で試す気にはなりませんでした。安全策をとってこの方法で仮想マシン上で実験しました。結果、これで良かったと心から思っております。)
Brewfile
HomebrewはMacで開発している方ならほとんど使っているはずです。(MacPortsを使っている人もいるかと思いますが。。。)。なのでbrewの延長線上で環境を管理できるので違和感なく導入できるのが最大のメリットだと思います。
そして非常にシンプル。Brewfileを用意してそこにインストールしたいものを記述しておけば、brew bundle
コマンド一発でセットアップができます。
しかもこのコマンドをたたいた時に、既にインストールされているものは「既にインストールされています」とスキップしてくれます。これ地味に便利。
Homebrew-cask
brewだけでできることはあくまでもbrewに登録されているパッケージを管理することだけです。そこでbrew-caskが必要になってきます。これを使うとdmgやpkg形式の普通のアプリケーションもインストールできるのです。素晴らしい。
私が普段使っているアプリは全てcaskのリポジトリに登録されていたので全く問題なかったです。もし自分が使っているアプリが登録されていなくても簡単なRubyのコードを書いてあげればOKなので拡張性も高いです。
まあアプリケーションのインストールはBoxenでもできるのですが、何度も言うように Brewの延長上でできる ということが最大の肝だと思います。
補足
インストール方法についてはここでは特に触れません。それぞれのドキュメント読むなり、冒頭であげた方々の記事を読めば詳しくのっております。
一応、各ツールのリンクだけ張っておきます。
まとめ
私のBrewfileはdotfilesの一部としてあげておきました。
こうしておけば以前書いた記事のようにhomesickを使って、いつでもどこでも自分の環境を作りなおすことが可能です。
チーム開発を行う場合はチームでのdotfilesを用意しておけば良いだけです。
すごいべた褒めな感じでBrewfileとHomebrew-caskを紹介しましたが不満点が無いわけではありません。
以下に今のところの私の不満点をあげておきます。もしかしたら何かしら方法があるかもしれないので「それできるよ!」というものがあったら@braitomまで教えていただけると助かります。
OS Xの設定ができない
App Storeのアプリはインストールできない
- これは致し方無いきもしますが、AppStoreの履歴からポチポチするのがダルいです。
brew-caskでインストールするものの中にはたまにpassword入力が必要なことがある
- 私の場合、Google日本語入力がpasswordの入力が必要で途中で処理が止まっていました
コマンド実行が必要なものをいれられない
この辺を解決できる手段があればまさに最強のツールになるのですが、たいした手間でも無いので私的には全然許容範囲です。
Xcodeおすすめプラグイン
今のところ使っていて便利なXcodeプラグインをつらつらと記録しておきます。
今後いいものを見つけたら更新していく予定。
Xcodeプラグインのインストール方法
~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
に入っている.xcplugin
ファイルを消せばOK。
現在使っているプラグイン
SCXcodeMiniMap
使い方 : Sublime Textと同じですMap上をクリックすればその辺りに移動できます。Ctrl + Shift + Mで表示/非表示の切り替え可能
Alcatraz
FuzzyAutocompletePlugin
XAlign
内容: コードを綺麗に整列してくれる。フォーマットとはまた違う。見た目をよくしてくれるという感じ。詳細はGithubのReadmeを見れば分かる。
使い方: 整列したい範囲を選択して⇧+⌘+Xを押すと整列してくれる。
cocoapods-xcode-plugin
- リポジトリ:https://github.com/kattrali/cocoapods-xcode-plugin
- 内容: podfileをXcode上から作成、編集できたり、インストールできたりする。
- 使い方: Xcodeメニューで、Product→CocoaPodsで色々できます。
- 注意点:このプラグインではデフォルトで、
/usr/bin/pod
、/usr/bin/gem
を見に行くようになっています。rbenv等を使っている方は、コード上で*POD_EXECUTABLE
と、*GEM_EXECUTABLE
を自分で使っているgemとpodのパスに書き換えてビルドして下さい。
最後に
とりあえずまだこれくらいしか使っていません。
いいプラグインがあればぜひ教えて下さい!!
Macのdotfilesをhomesickで管理する
扱うMacの台数が増えてきたので、そろそろ本気でdotfiles(.zshrcとか.vimrcとか)を管理してみることにしました。
単にGithubでdotfilesを管理するだけでもいいのですが、調べてみるとhomesickというgemを使うのが今はイケてるっぽい。
1. homesickを入れる
とりあえずhomesickを入れます。
$ gem install homesick
rbenv使っている場合はrbenv rehash
を忘れずに。(私はいつも忘れます。はい。)
2. GitHubにdotfilesリポジトリを作る
Web上から空のリポジトリを作っておいてもいいし、brewでhub入れてるならhubコマンドで作ってもいいです。
そしたら、ローカルの適当な場所に、dotfilesという名前でディレクトリを作成します。ここでgit init
しておきます。
$ mkdir ~/dotfiles && cd ~/dotfiles $ git init
さらにdotfilesの下にhomeという名前でディレクトリを作成します。そしたらこの中に、管理したいdotfile達をコピーしていきます。
$ mkdir home && cd home $ cp ~/.zshrc . $ cp ~/.vimrc . $ cp ~/.tmux.conf .
管理したいファイルをすべてコピーしたらgit add .
してからコミットしましょう。あとは先ほど作ったリポジトリにpushすればOKです。
(Gitの使い方とかGitHubへのpush方法は割愛します。)
3. homesickを使う
では早速homesickを使っていきましょう。
homesick clone
コマンドでdotfilesをhomesickの管理下に置けます。引数に、[GitHubのユーザ名]/[リポジトリ名]を渡すといい感じにcloneしてくれます。
私の場合は以下の様なコマンドとなります。
$ homesick clone braitom/dotfiles
そうすると以下の場所にcloneされます。
~/.homesick/repos/dotfiles
これで準備は整いました。後は実際に使う場所からsimlinkをはります。
私の場合はhomeで使いたいので以下の様な感じとなります。
$ cd ~ $ homesick symlink dotfiles
そうすると自動で~/.homesick/repos/dotfiles/homeフォルダの下にある全部のファイルにsymlinkが貼られます。
なお、ファイルが既にある場合は上書きするかどうか聞いてきます。以前のファイルを念のためバックアップしておきたい方はバックアップしておくことを忘れずに。
念のためls -la
できちんとsymlinkが貼られているか確認しておくことをお勧めします。
これ以降は~/.homesick/repos/dotfiles/をGitで管理していくことになるので、この時点で手順2で最初に作成した dotfilesデレクトリは消してしまってOKです。
なお、homesickでcloneするとremote.origin.urlがhttpsになっているのでsshに変更しておきましょう。特にGitHubに2段階認証を設定している場合は面倒なので変更しておくことをお勧めします。
$ git config remote.origin.url git@github.com:braitom/dotfiles.git
GitHubのssh設定が分からない方は以下に手順が書いてありますので参考に。
ちなみにhomesick list
でcloneしているリポジトリが分かります。
$ homesick list dotfiles git@github.com:braitom/dotfiles.git
あとは、~/.homesick/repos/dotfiles/homeのdotfile達を変更、追加する場合は通常のGitリポジトリとして管理していけばOKです。
ファイルを変更した場合は、
$ homesick commit dotfiles #vimが開くのでコミットメッセージを入れて保存 $ homesick push dotfiles
これでコミットされてpushされます。
ファイルを追加した場合は、homesick addみたいなコマンドがないようなので、
$ cd ~/.homesick/repos/dotfiles $ git add .
して、あとは変更時と同じようにコミットしてpushすればOKです。
3. 違うMacでhomesickを使ってdotfilesを同期する
だいたい分かるかと思いますが一応書いておきます。細かいことは上で書いた手順と同じなので割愛します。
- homesickのインストール
$ gem install homesick
- dotfilesリポジトリのclone
$ homesick clone braitom/dotfiles
- symlinkをはる
$ homesick symlink dotfiles
4. 運用方法
これであとはどのMacでもdotfilesの追加、更新をhomesick経由で管理していけばOKです。
違うMacで変更した設定を反映させるには以下のコマンドで。
$ homesick pull dotfiles
5. まとめ
このようにお手軽にdotfilesをGithub上で管理できるようになります。
いやーhomesick便利ですねー。
ちなみに私のdotfilesは以下にありますので興味がある方はご覧く下さい。各ファイルともまだまだまだ貧弱なのでアドバイスとかいただけると嬉しいです。
Macにoh-my-zsh導入
今までbashで別にいいやって感じでずっとbashを使い続けていましたが、どうもzshを使っていないと時代遅れ感がだいぶ出てきたのでzshを使うことにしました。
いろいろ設定するのめんどくさいなーとか思っていたらoh-my-zshを使うのがナウな感じなようです。
確かに基本的な設定は全部入っているし、プラグインの仕組みとかあるので便利そう。
Macにはデフォルトでzshが入ってますがbrewで入れたものを使うようにしたいと思います。
とりあえずbrewで最新版入れておきます。
Mac の zsh は起動時に PATH をリセットしてしまうそうなのでオプションつけてインストールしておきます。
$ brew install --disable-etcdir zsh
ここでoh-my-zshを入れましょう。
公式の通りcurlを叩きましょう。
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
途中でデフォルトのシェルをzshにするか聞いてくるのでパスワードを入れましょう。
ここでchpass
コマンドを叩いてみましょう。
こんな感じで、brewでいれたzshがデフォルトのshellになっているはずです。
## Shell: /usr/local/bin/zsh Full Name: braitom Office Location: Office Phone: Home Phone:
あとは自分の好きなテーマを適用したり、プラグインを適用したりして手に馴染むように育てていきましょう。
ちなみに私は今のところ”3den”というテーマがお気に入りです。 こんな感じ。
なお、以下のサイトを参考にさせていただきました。
Mac OS X で zsh + oh-my-zsh の環境を作って一通り設定するまで
良いテーマや、プラグインがあったら随時紹介していきたいと思います。
テーマは以下のページを見ると確認できます。
とりあえず今回は導入までということで。
追記
おすすめのテーマ"3den"としていましたが、なぜかrvmに依存しているようでいちいちrvmが見つからないと言ってくるのでうっとおしいのでやめました。
という訳で現在のおすすめのテーマは"wedisagree"です。gitリポジトリの場合そのステータスをグラフィカルに表示してくれます。あら便利。
詳しくはこちらで解説してくれています。
iOSで実機にアプリを転送してテストする方法
最近周りでiOSアプリの開発に手を出す方々が増えてきたので自分の備忘録も兼ねてまとめておきます。
今更感が若干ありますが。。。
注意点
ブラウザで行う作業はすべてSafariで行った方が無難です。Safari以外だと証明書の発行等がうまく動かずコケる可能性があります。
この記事は2013年12月現在のものです。今後若干手順が変わる可能性があります。
環境
今回は以下の環境で作業を行っています。
実機転送方法手順
全体としては以下の様な流れになります。
iOS Developer Programへの登録
Apple Developer Centerへログイン
証明書の作成
CSRファイルの作成
CSRファイルのアップロード
生成された証明書のダウンロード
テスト端末の登録
テストアプリのApp ID登録
プロビジョニングファイルの作成
Xcodeへの設定
実機への転送
それでは手順を説明していきます。
1. iOS Developer Programへの登録
ここでは細かい登録方法は省きます。(参考になる情報が山ほどあるので。)
以下の記事が参考になるかと思います。こちらを参考にして登録しましょう。
※個人的には普段使うAppleIDと開発用のAppleIDは分けることをお勧めします。iOS Developer Program登録の際は全て英語で記入しないとうまくいきません。一方で、iTunesでの購入などでは日本語設定であることが必要です。そのためIDを分けて管理した方が良いです。
どうしても登録できずにはまった場合はAppleのサポートセンターに電話しましょう。日本の番号にかければ日本語で対応してくれます。
※ちなみに私は自分の開発用のアカウントを忘れてしまいサポートの方に大変ご迷惑をお掛けしてしまいました。。。そして、サポートセンターの方の親切さに感動しました。
2. Apple Developer Centerへログイン
Apple Developer Centerへログインします。
上のメニューからメンバーセンターをクリックします。
3 証明書の作成
メンバーセンターに入るとこのような画面になるので「Certificates,Identifiers & Profiles」をクリックする。
次に「iOS Apps」の「Certificates」をクリックする。
そうすると、こんな画面になります。何もまだ証明書が無いときはこんな感じで表示されます。既に色々と作成してある場合は一覧がでます。右上の「+」ボタンを押します。
必要な証明書の種類を選択してContinueボタンを押します。今回は実機でのデバッグを行いたいので「iOS App Development」を選択します。
そうすると、このような画面が出ます。ここの説明にあるようにCSRファイルを作成します。
4. CSRファイルの作成
さて、ここからはローカルのMac上で作業を行うことになります。
キーチェーンアクセスを開きます。(アプリケーション>ユーティリティの中にあります。)
メニューから、キーチェーンアクセス>証明書アシスタント>認証局に証明書を要求..と開き、以下のように値を入力、選択します。
続けるを押すと、保存場所を聞かれるので、任意の場所を選択します。
その後、以下の画面となりますが、デフォルトのままで、続けるを押します。
そうすると以下の画面が表示され、先ほど指定した保存先に、「CertificateSigningRequest.certSigningRequest」というファイルができているはずです。
5. CSRファイルのアップロード
再びブラウザに戻ります。
CSRファイルをアップロードするように言われるので、先ほど作成して保存した「CertificateSigningRequest.certSigningRequest」を指定します。
指定したら、Generateボタンを押します。
6. 生成された証明書のダウンロード
こんなかんじで証明書をダウンロードできるようになるので、こいつをダウンロードします。
ダウンロードした証明書(.cer)をダブルクリックするとキーチェーンに登録されます。キーチェーンを開いて確認してみて下さい。以下のように登録されているはずです。
7. テスト端末の登録
ここまで来たらやっとデバイスの登録です。
Xcodeを開いてOrganizerを開きます。(Xcodeメニューから、Window > Organizer)
画面上の「Identifier」をコピーします。
ここからまたブラウザ上での作業になります。Developer Centerで今度はDevicesをクリックします。
こんな画面になると思うので右上の「+」ボタンを押します。
以下のような画面になるので項目を入力して「Continue」をクリックします。
確認画面が出るので問題なかったら「Register」をクリックします。
完了画面が出たらOKです。
再度一覧を見ると先ほど登録したデバイスが表示されているかと思います。
他にもデバイスを追加したい場合は「+」を押して同じ手順でデバイスを追加していって下さい。
8. テストアプリのApp ID登録
Developer Centerで今度はIdentifiersを選択してApp IDを登録します。例のごとく右上の「+」ボタンをクリックして下さい。
以下のような画面が出るので必要な情報を登録します。私は以下のように設定しています。
ポイントは、
「App ID Description」は任意の名前でOKです。普通はアプリケーションごとに作ったほうが良いです。私の場合ズボラなのでbraitomDevという名前にして開発用には使い回してます。
「App ID Prefix」は個人の場合はデフォルトのまま変更できません。企業でチーム作っている場合は何か設定できるはず。
「App ID Suffix」は「Explicit App ID」と「Wildcard App ID」の2種類ありますが、他のアプリと被らないようにどちらかだけ入力すればOKです。公開予定の明確なアプリの場合は「Explicit App ID」を使うほうが良いかと思います。テスト用でとりあえずの場合は「Wildcard App ID」で良いかと思います。私の場合は「jp.co.braitom.*」としてしまっています。
「App Services」の部分はPushなど何か使いたいサービスがあればチェックを入れます。
これで「Continue」ボタンを押すと確認画面がでるので、「Submit」ボタンを押せば登録完了です。
9. プロビジョニングファイルの作成
次にプロビジョニングファイルを作成します。いろいろ作るものがあってそろそろダルくなってきたと思いますがこれで最後です。頑張りましょう。
例のごとく今度は、「Provisioning Profiles」を選択して、右上の「+」ボタンを押します。
開発用に使いたいので、「Decelopment」の「iOS App Development」を選択して「Continue」をクリックします。
App IDを選択して、「Continue」をクリックします。
作成した証明書にチェックを入れて、「Continue」をクリックします。
デバイスにチェックを入れて、「Continue」をクリックします。(複数デバイスの場合は複数チェックできます)
Profile Nameは任意でOKです。入力したら「Generate」をクリックします。
生成されたプロビジョニングファイルをダウンロードします。
ここで、実機をMacに接続しておきましょう。
ダウンロードしたプロビジョニングファイルをダブルクリックするとXcodeのOrganizerに追加されていることが確認できます。StatusがちゃんとValid profileになっていればOKです。
10. Xcodeへの設定
さあ、ここまで来ればもう少しです。頑張りましょう!
Xcodeでプロジェクトを開きます。以下の手順でプロビジョニングファイルを設定します。
プロジェクトをクリックします。
Build Settingsを選択します。
Allを選択します。
Code Signingの各項目に先ほど作成した証明書、プロビジョニングファイルを選択します。
11. 実機への転送
さあ、いよいよ実機への転送です。実機をMacに接続しましょう。
Xcode上の以下の部分をクリックして、接続している実機を選択しましょう。ここではiPhone5Sを選択しています。
これでいよいよ実行です、XcodeでRunしましょう。▶ボタンを押せばOKです。
最初はもしかしたらこんな画面がでるかもしれませんがEnableを押して、パスワードを入力すればOKです。
こんな感じで無事に実機上で動作させることができました!
以上、めでたしめでたし。
おまけ: 他のMacでも実機デバッグしたい場合
Apple大好きのエンジニアの皆様はもちろんMacを複数台持っていますよね?そんな時にはメインのMacから証明書を書き出してそれを使うということができます。
1. 証明書の書き出し
最初に登録したMacでキーチェーンを開いて自分の証明書を表示します。
先ほど登録した証明書があると思うので、その証明書の三角アイコンをクリックします。
そうすると自分で付けた名前が見つかりますのでこれを右クリックし、「"【秘密鍵名】"を書き出す…」を選択します。
そうすると保存場所等を聞かれます。名前、場所はとりあえず適当でOKです。フォーマットは「個人情報交換(.p12)」を選択してくだい。
保存するときにパスワードの設定を求められたり、管理者のパスワードを求められるので設定、入力して下さい。
これで書き出しは完了です。
2. 証明書の登録
ここからは別のMacでの作業となります。
先ほど書きだした証明書を別のMacに送って下さい。そして証明書をダブルクリックします。
そうするとキーチェーンが開いて以下の様な画面が出ます。そのまま追加をクリックします。
その後、設定したパスワードの入力を求められるので設定します。
無事に登録されるとキーチェーンの自分の証明書のところにPhone Developerの証明書が追加されているかと思います。
3. 実機への転送
Xcodeを開いてOrganizerを開いてみましょう。以下の様に、問題なくプロビジョニングファイルが読み込まれるはずです。問題なくStatuteが緑色になってますね。
あとは同じ手順でXcodeから実行すればOKです。
まとめ
手順的には面倒くさいですが、一度やり方が分かってしまえば何てことはないです。ただし、しばらくするとすぐ忘れます。。。
リリース時の手順はやったことが無いので、機会があればまとめようかと思います。
Mac上にMacの仮想マシンをたてる
その名の通りです。
何がしたいんだって話はありますが、ちょっとした検証したい時にいつも使っているMacの環境を汚したくないときなどに非常に便利です。
自分の場合は、Boxenの検証環境として使うのが主な目的です。
基本的には以下を参考にすればOKです。 非常に助かりました。
2つ目の記事にもかいてあるように、SOFTWARE LICENSE AGREEMENT FOR OS X MAVERICKS を見ると、
(iii) to install, use and run up to two (2) additional copies or instances of the Apple Software within virtual operating system environments on each Mac Computer you own or control that is already running the Apple Software, for purposes of: (a) software development; (b) testing during software development; (c) using OS X Server; or (d) personal, non-commercial use
と書いてあるので、非商用目的での開発検証用ならば、1つのMac上に2つ仮想マシンを動かしてもOKみたい。なのでライセンス違反にはならないはず。
gemをたたく必要があるのですがMacならもともとRubyが入っているので大丈夫でしょう。
ちなみにこれらの記事はVirtualBox上で動かしていますが、VMWare Fusion 6でも作成したdmgを使えば仮想マシンとして動作させることができました。
こんな感じ。便利ですね!
##追記 ちなみにホストOSはMavericks(OSX 10.9)で試しています。
SqlAlchemy-migrateを使ってみる
SqlAlchemy-migrateを使ってみる
概要
RailsのActiveRecordのMigrationに影響を受けて、SQLAlchemy を使ったプロジェクトのスキーマ管理をできるようにしたもの。
現時点での最新Verは0.8.2みたいです。
Package Index > sqlalchemy-migrate > 0.8.2
使用方法
ライブラリのインストール
$ pip install sqlalchemy
$ pip install sqlalchemy-migrate
これにより"migrate"コマンドが使えるようになる。
$ migrate --help
プロジェクトの作成
※DBは既に存在していることを前提とする。今回はチュートリアルにのっとりSQLiteを使用します。
ちなみに初期Tableはこんな感じで作ってある。
# create_table.py
from sqlalchemy import *
engine = create_engine('sqlite:///test.db', echo=True)
meta = MetaData()
city = Table('city', meta,
Column('city_id', INTEGER, primary_key=True),
Column('city_name', String(32)))
meta.create_all(engine)
まずはプロジェクトを作る。
$ migrate create test_migrate "Test Project"
$ tree
.
└── test_migrate
├── README
├── __init__.py
├── __init__.pyc
├── manage.py
├── migrate.cfg
└── versions
├── __init__.py
└── __init__.pyc
データベースの初期化
$ cd test_migrate/
$ python manage.py version_control sqlite:///test.db .
毎回、データベース情報引数で渡すのはめんどいので登録しておく。
$ migrate manage manage.py --repository=. --url=sqlite:///test.db
DB見るとマイグレーション用のTableができてる。
$ sqlite3 test.db
$ .explain ON
$ .tables
city migrate_version
sqlite> select * from city;
city city_name
---- -------------
1 Los Angels
2 San Francisco
sqlite> select * from migrate_version;
repo repository_pa vers
---- ------------- ----
Test Project . 0
現在のスキーマバージョン。
$ python manage.py db_version
0
登録されているスキーマバージョンの確認。
$ python manage.py version
0
スキーマ変更用のスクリプトの作成
$ python manage.py script "Add country table"
$ cd versions/
001_Add_country_table.py __init__.py __init__.pyc
001_Add_country_table.pyを書き換える。
# 001_Add_country_table.py
from sqlalchemy import *
from migrate import *
meta = MetaData()
country = Table('country', meta,
Column('id', Integer, primary_key=True),
Column('country_name', String(32))
)
def upgrade(migrate_engine):
meta.bind = migrate_engine
country.create()
def downgrade(migrate_engine):
meta.bind = migrate_engine
country.drop()
ちゃんと動くかテストする。
$ python manage.py test
Upgrading...
done
Downgrading...
done
Success
現在のスキーマバージョン、登録されているスキーマバージョンを確認してみる。 versionが1上がってますね。
$ python manage.py db_version
0
$ python manage.py version
1
スキーマを上げる
$ python manage.py upgrade
0 -> 1...
done
バージョンが上がっているか確認。
$ python manage.py db_version
1
sqliteの中身みてみる。countryが追加されてる。
sqlite> .tables city country migrate_version sqlite> .schema country CREATE TABLE country ( id INTEGER NOT NULL, country_name VARCHAR(32), PRIMARY KEY (id) );
ダウングレードしてみる
できてますね。(countoryが消えてる。)
$ python manage.py downgrade 0
1 -> 0...
done
sqlite> .tables
city migrate_version
元に戻してみてもOK。
$ python manage.py upgrade
0 -> 1...
done
sqlite> .tables
city country migrate_version
カラムの追加
countryテーブルにpopulationカラムを追加してみる。 スクリプトが追加されてますね。
$ python manage.py script "Add population column in country table"
$ ls versions/
001_Add_country_table.py __init__.py
001_Add_country_table.pyc __init__.pyc
002_Add_population_column_in_country_table.py
002_Add_population_column_in_country_table.pyを書き換えてみる。
# 002_Add_population_column_in_country_table.py
from sqlalchemy import *
from migrate import *
def upgrade(migrate_engine):
meta = MetaData(bind=migrate_engine)
country = Table('country', meta, autoload=True)
population_col = Column('population', Integer)
population_col.create(country)
def downgrade(migrate_engine):
meta = MetaData(bind=migrate_engine)
country = Table('country', meta, autoload=True)
country.c.population.drop()
テストしてみる。いけそう。
$ python manage.py test
Upgrading...
done
Downgrading...
done
Success
現在のスキーマバージョン、登録されているスキーマバージョンを確認してみる。
$ python manage.py db_version
1
$ python manage.py version
2
アップデートしてみる。populationカラムが追加されてますね。
$ python manage.py upgrade
1 -> 2...
done
sqlite> .schema country
CREATE TABLE country (
id INTEGER NOT NULL,
country_name VARCHAR(32), population INTEGER,
PRIMARY KEY (id)
);
現在のスキーマバージョン、登録されているスキーマバージョンを確認してみる。
$ python manage.py db_version
2
$ python manage.py version
2
複数バージョン間の移動
もちろんver2からver0、ver0からver2とかもできる。
$ python manage.py downgrade 0
2 -> 1...
done
1 -> 0...
done
$ python manage.py upgrade 2
0 -> 1...
done
1 -> 2...
done
まとめ
SqlAlchemy-migrate非常に便利ですね。Flaskとかとも組み合わせて使ってみたい。