Python学習【365日チャレンジ!】365日目のマスターU(@Udemy11)です。
ついに、Python学習365日チャレンジの最終日がやってきました!
実際に、この日を迎えてみると、思ったより短かったな〜というのが率直な感想です。
このチャレンジを始めるときは、1年間毎日記事を書けるのか不安でしたが、Pythonを学習した内容を健忘録のように記録することを繰り返していると、あっという間に1ヶ月、2ヶ月と過ぎていきました。
3ヶ月ほど経ったくらいの時期に、Python学習自体でつまづきも出てきたので、記事にするのがちょっとむずかしい時期がありました。
その時期をなんとか切り抜けて、また順調に記事を書けたと思うとまたつまずいてという繰り返しだったのですが、もっとも危うかったのが年末年始です。
気持ちは年末だし、サボってゆっくりしたいと思いながらも、それまでに継続してきた日数から考えると、ゴールは目の前だったので、なんとかサボりたい気持ちを乗り越えて、今日まで実践することができました。
後ほど、Python学習365日チャレンジの振り返りを記事にしたいと思っています。
今日は、次のステップへの第一歩的な感じでPythonistaとGitHubの連携について学習したいと思います。
以前から、Pythonistaにシェル実行コマンド環境を作れるStaSh(Pythonista Shell)をインストールして、ファイルをGitHubでバージョン管理したいと思い、やってみたものの、うまくイカなかったので、すぐに諦めていましたが、今回、重い腰を上げて導入してみることにしました。
ちなみに【PythonistaにStaShをインストールする方法】は、Web上でたくさん記事にされているのですが、具体的に【Pythonistaで、GitHubを使ってバージョン管理をする方法】はあまり記事にはされていないのか、それとも実践している人がいないのか、検索してもなかなかヒットする記事がありません。
とりあえず、いろいろと試行錯誤しながら、なんとかGitHubとPythonistaで連携をとれるようになったので、健忘録の意味を含めて記事にしておこうと思います。
少しでも、Pythonistaを使いつつ、GitHubでバージョン管理をしたいと考えている方の参考になれば幸いです。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、GitHubを使うにあたって、gitの理解は必要不可欠なので、gitの基本的な使い方について学習しました。
基本的なgitの使い方は、git init
でローカルリポジトリを作成して、git clone
でリモートリポジトリを複製して作業したあとgit commit
でコミットしたコンテンツをgit push
でリモートリポジトリに反映させるという作業の繰り返しです。
一人で作業するときは、ローカルリポジトリを作成したあと、git add
で、ローカルリポジトリのステージングエリアにコンテンツを追加する必要がありました。
gitの基本的な使い方の詳細については、こちらの記事をごらんください。
今日は、PythonistaでGitとGitHubを使ったバージョン管理について、私が実践したやり方を紹介していきたいと思います。
PythonistaでStaSh(シェルコマンド実行環境)をインストール
PythonistaでGitHubと連携をとるには、gitコマンドを使用できる環境を導入する必要があります。
そのために、Pythonistaでシェルコマンドを使うことができるStaShを使えるようにします。
Pythonistaの画面を右にスワイプして表示できる【コンソール】から下記コマンドを実行します。
import requests as r; exec(r.get('https://bit.ly/get-stash').content)
はじめてコンソールの画面を見るときは、どこに入力していいかわからなくなりますが、画面下の【>】マークの右をタップすれば、キーボードが表示されるので、ここにコピー&ペーストして実行します。
これでPythonistaでStaShを使うためのパッケージがダウンロードされて、シェルコマンドからpipインストールやgitコマンドを扱う準備は完了です。
メニューの【This iPhone】の中に【launch_stash.py】ができているので、ファイルを開いて、右上の実行アイコンをタップすれば、StaShが立ち上がります。
私のiPhoneが原因なのか、実行したときにアプリが落ちてしまうことがあるのですが、何度か実行すれば、きちんと立ち上がります。
ちなみにこれは、Python2.7の実行画面です。
Python2.7で実行
もしかしたら、この説明を先にしといたほうが良かったかもしれませんが、PythinistaはPython3.6とPython2.7を使えるので、デフォルトのインタープリターをPython2.7に変更しておきます。
Pythonistaのメニュー画面右下の歯車アイコンをタップします。
【Default Interpreter】をタップします。
【Python 2.7】をタップして、表示されるダイアログでも【Use Python 2.7】をタップしたあと、右上の【Done】をタップします。
Python3.6でも一応使えますが、いくつかのコマンドは実行できないという警告がでるので、Python2.7でStaShを使うようにしましょう。
SSH key(公開鍵)を作成
GitHubでデータを管理するためには、接続の際に必要になる公開鍵を作成して、GitHubのSSH keyに登録する必要があります。
Python2.7でStaShを立ち上げてから、次のコマンドを実行して、デフォルトよりセキュリティの高い2048bitのSSH keyを作成します。
ssh-keygen -t rsa -b 2048
作成したSSH keyは、【id_rsa.pub】という名前で【~/.ssh】フォルダに保存されているので、下記のcatコマンドを実行してSSH keyを表示します。
cat ~/.ssh/id_rsa.pub
表示されている文字列がSSH keyなので、すべてを選択してコピーします。
GitHubにSSH-keyを登録
すでにGitHubのアカウントは保有している前提で解説していますが、まだGitHubのアカウントを取得していない場合は、下記の記事を参考にアカウントを取得してみてください。
まずは、GitHubにログインして【Account setting】から【SSH and GPG keys】を選びます。
次に表示される画面で、SSH keysの右にある【New SSH key】ボタンをクリックします。
【Title】にPythonista(任意の名前)、【Key】に先ほどコピーしたSSH keyをペーストして、【Add SSH key】をクリックします。
下記の画面が表示され、新しい【SSH key】が追加されます。
これでPythonistaのStaShからSSHでGitHubにアクセスするための準備が完了です。
git cloneでローカルに複製
続いて、昨日gitの基本的な使い方で作成したリモートリポジトリ(gittest
)をPythonistaのローカルリポジトリにgit clone
で複製してみます。
StaShで、cd
コマンドを使って、作業フォルダ(私の場合はgithub
)に移動します。
次のコマンドを実行します。
git clone git@github.com:udemymaster/gittest.git
これで、github
フォルダの中に、gittest
フォルダが作成され、その中にhello.py
が作成されているはず。
どういうわけか、フォルダ名がgittes
になってしまっていましたが、まー良しとしましょう。
commitの状態を確認
git clone
を使ってリモートリポジトリをローカルリポジトリに複製できたので、git log
を使ってコミットの状態を確認してみましょう。
昨日、作業したファイルを作ったコミットと、GitHub上でコードを追加したコミットが記録されているのがわかるかと思います。
ローカルリポジトリで編集してadd
続いて、hello.py
に【I am MasterU】と出力するコードを付け加えて、リポジトリのステージングエリアにadd
します。
hello.py
print('Hello World')
print('Yes!!')
print('I am MasterU')
ハイライトしている3行目を付け加えました。
次に画面を右にスワイプして、StaShに戻り、コマンドgit add hello.py
を実行して、hello.py
をステージングエリアに追加します。
ブランチを変更してコミット
続いて、Githubのメインブランチがmain
なので、git branch -M main
を実行してブランチ名を変更してからコミットします。
master
をmain
に変更したメッセージが出たあと、エラーが起こっているので、ちょっと気になりますが、このままcommit
してみることにしました。
StaShは、git commit
にメッセージを追加する-m
のオプションが使えない代わりに、
git commit 'メッセージの内容' 'ユーザーネーム' 'メールアドレス'
という記述でユーザーとメールアドレス、メッセージをコミットに入れることができます。
コミットが完了したら、次のコマンドで、リモートリポジトリにcommit
をpush
します。
git push git@github.com:udemymaster/gittest.git
メッセージのあとにsuccess!
と表示されれば完了です。
GitHubで確認
Pythonistaで編集したhello.py
をGitHubのリモートリポジトリにpush
したので、状態を確認してみましょう。
iPhone用のGitHubアプリでgittest
リポジトリを確認してみたところ、どうにもコミットが追加されていない模様。
StaShでは、問題なくpush
が完了していたので、どこかにあるはずだと思って考えると、どうやらブランチが怪しいので、ブランチの右に表示されている【変更】をタップしてみると、やっぱりここに怪しいものがありました。
ブランチをmain
に変更したはずなのに、master
ブランチが作成されているではありませんか!
しかもその中に、きちんとコミットが記録されていました。
コードの中身もきちんと保存されています。
ブランチが、変更したはずのmain
ではなく、どうしてmaster
に記録されているのかわからないのですが、とりあえずPythonistaとGitHubでgitを使ったやり取りができました。
まとめ
Python学習【365日チャレンジ】の最終日だったので、すべての問題を解決して終了したかったのですが、残念ながら解決することができませんでした。
すべてわかっているような体で記事を書いていますが、実のところ、めちゃくちゃわけわかんない状態なんです。
日本語でPythonistaとGitHubの連携を詳しく解説している記事は見つからないし、英語で【how to change git branch on Pythonista】なんていうそれらしいキーワードで検索してみても、問題を解決してくれる記事は見つけられませんでした。
なので、git -h
やgit branch -h
でヘルプを見てみるも解決にいたらず。。。
そんなこんなで、頭の中でクエスチョンマークが飛び交っていますが、ターミナルで使うgitコマンドと、StaSh上でのgitコマンドの使い方にかなり差があることだけはよくわかりました。
ターミナル上で使えるオプションはほとんど使えないと考えた方がよくて、基本的な使い方は同じだけと、全く別物のgitと考えた方が理解しやすいかと思います。
言ってみれば、【穴子】と【うなぎ】みたいなものでしょうか。見た目はほとんど同じだけど、味も住むところも微妙に違うという感じ。
とりあえず、基本的なコマンドは一緒なので、ある程度理解できれば、ターミナルでもStaShでも使いこなすことができるかと思います。
今回は基本的な使い方を実践してきましたが、コンテンツをステージングエリアから削除したり、commit
を変更したり、git管理対象外のコンテンツにしたりと、まだまだ細かい使い方がたくさんあるので、これから実践を交えて少しづつ学習していきたいと思います。
それでは、明日もGood Python!
と言いたいところですが、明日はもしかしたら、Python学習365日チャレンジ達成したので、おやすみするかもしれませんよ〜。