pecoでらくらくgit checkout
まえがき
gitでブランチ切り替えをするとき、いちいちブランチ名を入力しないといけないのが手間だな〜と日頃から思っていたのですが、pecoでブランチ名を選択するようにできるらしいので、やってみます。
環境
- OS: macOS Mojave
- OS version: 10.14.6
- docker version: 19.03.1
pecoとは
pecoは、コマンドの実行結果を変数に入れて別のコマンドを実行するときに選択肢として表示できるようにするツールです(正確な説明ではないかもしれないです)。
ssh先を手元で管理するときとかによく使われている印象です。
pecoインストール
% brew install peco % peco --version peco version v0.5.3 (built with go1.10.3)
最新版がインストールされたみたいです。
pecoを使っていく
pecoの基本的な使い方は、「選択肢として表示させたいコマンドをパイプで渡す」です。
今回はgitのブランチのリストを選択肢として表示させたいので、
% git branch -a | peco
となります。
実行すると、こんな感じでブランチが表示され、カーソルキー上下で選ぶことができます。
(*がついているブランチがカレントブランチです)
QUERY> IgnoreCase [4 (1/1)] develop * master remotes/origin/HEAD -> origin/master remotes/origin/master
git checkoutするには下記のように実行します。
% git checkout $(git branch -a | peco)
より便利に使うために、pecoまで含んだワンライナーをalias化してbashrcやzshrcに追記します。
今回はgc
でブランチを選択肢として表示させてcheckoutできるようにします。
alias gc='git checkout $(git branch -a | peco)'
source
で読み込んで、gc
でブランチ切り替えができれば成功です。
まとめ
いつもブランチ名を都度確認して、チェックアウトして…とやっていたので、これでだいぶ手間が減りそうです。
ただ、ブランチがあまりにも多いと探すのも時間がかかりそうですね…
表示させてさらに検索とか絞り込みができればもっと便利に使えそうです。
docker上で動くJenkins上でAWS CLIを使いたい(後編)
まえがき
前回の記事はこちら。
実はpipを使う方法も最初に試していたのですが、パーミッションでこけたのではなから諦めていました。
ですがふとUSERをrootにしたらどうなるだろうと試してみたらpipが入ったのでこちらの方法でやってみます。pipの方が簡単ですし…
pipを入れる
下記のようにDockerfileを作ってpipを入れます。
FROM jenkins:latest USER root RUN whoami RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python RUN pip -V
ビルドします。
イメージ名はjenkins-pipとします。
% docker build -t jenkins-pip:latest . --no-cache ~~~~~~~~~~ Step 5/5 : RUN pip -V ---> Running in 82fb72a1add8 pip 19.2.3 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7) Removing intermediate container 82fb72a1add8 ---> f5ab3e83145a Successfully built f5ab3e83145a Successfully tagged jenkins-pip:latest
pip入りました。
AWS CLIを入れる
先ほどのDockerfileを元にAWS CLIをインストールするDockerfileを作ります。
FROM jenkins:latest USER root RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python RUN pip install awscli RUN aws --version
ビルドします。
% docker build -t jenkins-pip:latest . --no-cache ~~~~~~~~~~ Step 5/5 : RUN aws --version ---> Running in 37e73c5894a7 aws-cli/1.16.227 Python/2.7.13 Linux/4.9.184-linuxkit botocore/1.12.217 Removing intermediate container 37e73c5894a7 ---> 89825d2eae74 Successfully built 89825d2eae74 Successfully tagged jenkins-pip:latest
awsコマンドが実行できています!やったね!
Jenkinsを起動して適当にジョブを作って実行してみましたが、awsコマンドは使えていそうです。
まとめ
USERをrootにしないといけないのが若干気になりますが、使えるようになったので一旦これでよしとします。
今夜はぐっすり眠れそうです。
docker上で動くJenkinsでAWS CLIを使いたい(前編)
まえがき
dockerで動くJenkinsを構築し、そのジョブでAWS CLIを使う用事があったのですがなかなかできないので記事にしながら整理します…!
長くなってしまったので前編後編で分けます。
環境
- OS: macOS Mojave
- OS version: 10.14.6
- docker version: 19.03.1
Jenkins構築
dockerhubから公式のJenkinsイメージをpullします。
% docker pull jenkins
イメージがpullできたことを確認します。
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins latest cd14cecfdb3a 13 months ago 696MB
一度このイメージからコンテナを起動します。
% docker run -d -p 8080:8080 -it --name jenkins jenkins % docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0a3ccda1f28c jenkins "/bin/tini -- /usr/l…" 25 seconds ago Up 23 seconds 0.0.0.0:8080->8080/tcp, 50000/tcp jenkins
ブラウザでlocalhost:8080にアクセスすると、Jenkinsの初期設定画面が表示されます。
ここまでで一旦置いておきます。
AWS CLIを実行できるようにする
AWS CLIをインストールするためにDockerfileを作ります。
FROM
で先ほどpullしてきたイメージを指定して、RUN
でAWS CLIのインストールをします。
FROM jenkins:latest RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" RUN unzip awscli-bundle.zip RUN ./awscli-bundle/install -b ~/bin/aws
docker build
でイメージを作ります。イメージ名はjenkins-awscli
とします。
% docker build -t jenkins-awscli:latest . --rm=true Sending build context to Docker daemon 2.048kB Step 1/4 : FROM jenkins:latest ---> cd14cecfdb3a Step 2/4 : RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" ---> Running in 19158b3354aa % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Warning: Failed to create the file awscli-bundle.zip: Permission denied 0 11.9M 0 16360 0 0 12166 0 0:17:09 0:00:01 0:17:08 12172 curl: (23) Failed writing body (0 != 16360) The command '/bin/sh -c curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"' returned a non-zero code: 23
ファイルを作る権限がないようです…
先ほど立てたjenkinsコンテナに入ってみると、最初のカレントディレクトリが/
なので、これが原因かな…?
jenkinsユーザのホームディレクトリを指定してやってみます。
Dockerfileを下記のように修正します。
FROM jenkins:latest RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "/var/jenkins_home/awscli-bundle.zip" RUN unzip /var/jenkins_home/awscli-bundle.zip RUN ./awscli-bundle/install -b ~/bin/aws
もう一度イメージを作ります。
% docker build -t jenkins-awscli:latest . --rm=true Sending build context to Docker daemon 2.048kB Step 1/4 : FROM jenkins:latest ---> cd14cecfdb3a Step 2/4 : RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "/var/jenkins_home/awscli-bundle.zip" ---> Running in 18351a0165be % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11.9M 100 11.9M 0 0 870k 0 0:00:14 0:00:14 --:--:-- 978k Removing intermediate container 18351a0165be ---> 0f58bb1e22df Step 3/4 : RUN unzip /var/jenkins_home/awscli-bundle.zip ---> Running in 859faaa07f33 unzip: cannot find or open /var/jenkins_home/awscli-bundle.zip, /var/jenkins_home/awscli-bundle.zip.zip or /var/jenkins_home/awscli-bundle.zip.ZIP. The command '/bin/sh -c unzip /var/jenkins_home/awscli-bundle.zip' returned a non-zero code: 9
どうもcurlしてきたファイルが指定のディレクトリに置けていないみたいです。
試しにpwd
とls
をRUNで実行してみます。
FROM jenkins:latest RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "/var/jenkins_home/awscli-bundle.zip" RUN pwd RUN ls -al /var/jenkins_home/ #RUN unzip /var/jenkins_home/awscli-bundle.zip #RUN ./awscli-bundle/install -b ~/bin/aw
ビルドします。
docker build -t jenkins-awscli:latest . --no-cache Sending build context to Docker daemon 2.048kB Step 1/4 : FROM jenkins:latest ---> cd14cecfdb3a Step 2/4 : RUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "/var/jenkins_home/awscli-bundle.zip" ---> Running in 036df9da7fcb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11.9M 100 11.9M 0 0 1416k 0 0:00:08 0:00:08 --:--:-- 1822k Removing intermediate container 036df9da7fcb ---> fe9b3bb14ff9 Step 3/4 : RUN pwd ---> Running in 5d77ba51659a / Removing intermediate container 5d77ba51659a ---> 1ac650f90bf7 Step 4/4 : RUN ls -al /var/jenkins_home/ ---> Running in f4fb7e4bcc50 total 20 drwxr-xr-x 2 jenkins jenkins 4096 Aug 28 13:21 . drwxr-xr-x 1 root root 4096 Jul 17 2018 .. -rw-r--r-- 1 jenkins jenkins 220 May 15 2017 .bash_logout -rw-r--r-- 1 jenkins jenkins 3526 May 15 2017 .bashrc -rw-r--r-- 1 jenkins jenkins 675 May 15 2017 .profile Removing intermediate container f4fb7e4bcc50 ---> 46ad3e98188b Successfully built 46ad3e98188b Successfully tagged jenkins-awscli:latest
カレントディレクトリは/
で、/var/jenkins_home/にはやはりファイルが置かれていないようです…
「curlの-o以降が認識されていないのでは?」と指摘をもらったので、ローカルでzipファイルをcurlして、COPYで置くことにしてみます。
FROM jenkins:latest COPY awscli-bundle.zip /var/jenkins_home/awscli-bundle.zip RUN ls -al /var/jenkins_home/ #RUN unzip /var/jenkins_home/awscli-bundle.zip #RUN ./awscli-bundle/install -b ~/bin/aws
ビルドしてみると、zipファイルが置けています。
% docker build -t jenkins-awscli:latest . --no-cache Sending build context to Docker daemon 12.52MB Step 1/3 : FROM jenkins:latest ---> cd14cecfdb3a Step 2/3 : COPY awscli-bundle.zip /var/jenkins_home/awscli-bundle.zip ---> 9b0dccab7709 Step 3/3 : RUN ls -al /var/jenkins_home/ ---> Running in 8233fb5290c3 total 12252 drwxr-xr-x 2 jenkins jenkins 4096 Aug 28 13:30 . drwxr-xr-x 1 root root 4096 Jul 17 2018 .. -rw-r--r-- 1 jenkins jenkins 220 May 15 2017 .bash_logout -rw-r--r-- 1 jenkins jenkins 3526 May 15 2017 .bashrc -rw-r--r-- 1 jenkins jenkins 675 May 15 2017 .profile -rw-r--r-- 1 root root 12521907 Aug 28 13:27 awscli-bundle.zip Removing intermediate container 8233fb5290c3 ---> 82c3c1da2556 Successfully built 82c3c1da2556 Successfully tagged jenkins-awscli:latest
unzipのコメントアウトを外してイメージを作り直してみます。
解凍先も指定しました。
FROM jenkins:latest COPY awscli-bundle.zip /var/jenkins_home/awscli-bundle.zip RUN unzip /var/jenkins_home/awscli-bundle.zip -d /var/jenkins_home/ # lsでファイルがあることを確認 RUN ls -al /var/jenkins_home/ #RUN ./awscli-bundle/install -b ~/bin/aws
ビルド〜
~~~ Archive: /var/jenkins_home/awscli-bundle.zip inflating: /var/jenkins_home/awscli-bundle/install inflating: /var/jenkins_home/awscli-bundle/packages/virtualenv-15.1.0.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/argparse-1.2.1.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/urllib3-1.25.3.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/colorama-0.3.9.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/PyYAML-5.1.2.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/rsa-3.4.2.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/docutils-0.15.2.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/s3transfer-0.2.1.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/python-dateutil-2.8.0.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/awscli-1.16.227.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/ordereddict-1.1.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/python-dateutil-2.6.1.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/jmespath-0.9.4.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/botocore-1.12.217.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/pyasn1-0.4.6.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/urllib3-1.22.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/six-1.12.0.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/futures-3.3.0.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/simplejson-3.3.0.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/PyYAML-3.13.tar.gz inflating: /var/jenkins_home/awscli-bundle/packages/setup/setuptools_scm-1.15.7.tar.gz Removing intermediate container 6b1fea1c92b8 ---> 82230c66e941 Step 4/4 : RUN ls -al /var/jenkins_home/ ---> Running in 552c780855a0 total 12252 drwxr-xr-x 2 jenkins jenkins 4096 Aug 28 13:36 . drwxr-xr-x 1 root root 4096 Jul 17 2018 .. -rw-r--r-- 1 jenkins jenkins 220 May 15 2017 .bash_logout -rw-r--r-- 1 jenkins jenkins 3526 May 15 2017 .bashrc -rw-r--r-- 1 jenkins jenkins 675 May 15 2017 .profile -rw-r--r-- 1 root root 12521907 Aug 28 13:27 awscli-bundle.zip ~~~
…?
解凍できてるっぽいのに解凍したものがディレクトリにありません。
コンテナを立ち上げてsshして手動でunzipしてみたのですがこれは普通にできました。
まとめ
直面した問題をまとめておきます。
Dockerfile内でのcurlはオプションが使えない?
=> ローカルに落としてきたzipをCOPYで置くことで暫定対応。どうしてcurlでファイルを配置できないのかは謎のまま。Dockerfile内でのunzipができてる風なのにできていない?
=> コンテナに入って手動でのunzipはできるので謎。解凍済みのディレクトリを丸ごとコピーしてみようかと思う。
次は解凍済みのディレクトリをCOPYで置いてやってみるところからやってみようと思います。
夏休みなのでAndroidアプリ開発に入門した
まえがき
夏休み、昨日から2日間何も用事がないので何かやってみたかったことをやろうかなと思い、Androidアプリ開発に入門しました。
1日目
1日目はこちらの本を使ってサンプルアプリを作ってみました。
たった1日で基本が身に付く! Androidアプリ開発超入門
- 作者: 中川幸哉
- 出版社/メーカー: 技術評論社
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Javaは本当に少しだけかじったことがある程度、AndroidStudioは初めて触るというレベルですが、わかりやすく解説されていてちゃんと1日で終わりました。
最後の章で作成したビンゴアプリがこちらです。
夏休みなのでAndroidアプリ開発に入門した!サンプルのビンゴアプリに履歴クリアするのも追加してみた pic.twitter.com/cFWO59Wbgj
— mizukichi3 (@mizukichi3_) August 13, 2019
章で作成する機能に履歴を削除する機能をプラスアルファでつけました。
意外とアプリって作れるんだな〜と自分の中のハードルが下がりました。
2日目
2日目は昨日のビンゴアプリの応用で、ルーレットアプリを作ろうと思い、作っています。
機能としては、名前を入力するとその中から1人選んで表示するという簡単なものです。
リセットボタンで入力した値、抽選結果のクリアもできるようにしました。
機能面は一旦完成、もう少し時間あるからデザインとかいじろうかな(苦手) pic.twitter.com/oIWPc4IIkH
— mizukichi3 (@mizukichi3_) August 14, 2019
コードはこちら。
あと実装しできたらしたいな〜と思っているのが
- 名前を表示する前にトゥルルル(ドラムロールがなりそうな感じ)なエフェクトをかけたい
- 「今回は」「さんお願いします!」の文を雰囲気を選ぶと変えられるようにしたい
- デザインをもう少しかっこよくしたい
なんですが、なかなか難しそうです…
今日中にどこまでいけるかな…
あとがき
アプリ開発というとなんとなくハードル高く感じていましたが、したいことをロジックに落とし込めれば案外作れるのかなと思いました。
気が向いたら他にも作ってみたいな〜と思っています。
職場のMacで寿司を流せないので家のMacにvimのpluginを入れて寿司を流す
まえがき
職場のMacがTouchbar付きのものになったので寿司を流したかったのですが、怒られそうなので家のMacでvimで寿司を流して楽しみます🍣
プラグインマネージャーインストール
vimのプラグインを入れるにはプラグインマネージャーが必要らしい。
入れたいプラグインのリポジトリに行くと、NeoBundleと書いてあるのでNeoBundleを入れます。
インストールはREADMEに従って行いました。
$ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh $ sh ./install.sh
Please add the following settings for NeoBundle to the top of your .vimrc file:
と表示されるので、"NeoBundle Scripts-----------------------------
で始まるブロックを.vimrc
に追記します。
一度.vimrc
を保存して閉じて、もう一度vimを起動すると、下記のように聞かれるので、yを入力します。
Not installed bundles: ['vimshell', 'ctrlp.vim', 'vim-colorschemes', 'vim-fugitive', 'neosnippet.vim', 'neosnippet-snippets'] Install bundles now? (y)es, [N]o:
下の方にNeoBundle Updateのように表示されるので、しばらく待ちます。
vim操作ができるようになったら、保存して終了します。
プラグインマネージャーのインストールは終わりです。
プラグインインストール
今回入れるプラグインはこちらです。
職場のMacのTouchbarで寿司を流せないのでvimで流して楽しみます。
READMEに従って.vimrc
に下記を追記します。
NeoBundle 'pocke/sushibar.vim' set statusline=%!sushibar#sushibar() set laststatus=2
NeoBundleで始まる行をどこに書くかで詰まりました…
call neobundle#begin
とcall neobundle#end
の間に書く必要があるんですね…
保存して閉じて、もう一度vimを起動します。
寿司が流れました!
gifとかの撮り方がわからないので貼れないのが残念ですが、操作するたびに寿司が流れて楽しげな感じになりました。
まとめ
今回作ったvimrcはこちらです。
遊び心のあるものが結構好きなので、他にも色々試してみたいと思います🍣
treeコマンドが便利な話
まえがき
ディレクトリ構成を書くことがたびたびあるのですが、いちいち記号を探すのが面倒だったのでtreeコマンドを導入しました。
treeインストール
任意のパッケージ管理ツールでインストールします。
今回はMacに入れます。
環境は下記です。
- OS: macOS Mojave
- OS version: 10.14.5
brewでインストールします。
brew install tree
インストール終了後、tree
を実行すると…
tree [master] . ├── README.md ├── ansible │ ├── check-connect-host.md │ ├── execute-playbook-specific-host.md │ ├── execute-playbook-specific-task.md │ ├── show-hosts-list.md │ ├── step-execute-playbook.md │ └── use-variable-by-lookup.md (略)
こんな感じで出てきます。
-L
で表示するディレクトリの深さも指定できます。
tree -L 1 [master] . ├── README.md ├── ansible ├── aws ├── bash ├── git ├── linux ├── mac ├── markdown ├── network ├── nodejs ├── pip ├── terraform ├── vim ├── windows └── yum 14 directories, 1 file
表示するディレクトリも指定できます。
tree -L 1 ./aws [master] ./aws └── search-resources-all-region.md 0 directories, 1 file
まとめ
いちいち記号を探す面倒から解放されました…!
環境によってはむやみにパッケージをインストールできないこともあるので、その時に別の環境で実行して記号を探すという使い方もできそうです(あんまりしたくない)
zshを導入したい(願望)
まえがき
bashを使っているのですが、zshの補完機能が良いと聞いたのでzshに切り替えたいなと思っています。
ですがzshrcを作る際に面倒がってしまい、事故りました…
環境
- OS: macOS Mojave
- OS version: 10.14.5
zshに切り替える
デフォルトで入っているzshに切り替える
Macにはデフォルトで何種類かシェルが入っています。
下記コマンドで確認できます。
$ cat /etc/shells
入っているのはだいたい下の6つかなと思います。
/bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
zshもデフォルトで入っているので切り替えてみます。
下記コマンドでログインシェルを切り替えます。
$ chsh -s /bin/zsh
一度ログアウトして再度ログインすると、zshになります。
何かしら失敗してたらログインできなくなる可能性があるため、新しいタブを開いてログインしてみるのがおすすめです。
バージョンを確認してみます。
% zsh --version zsh 5.3 (x86_64-apple-darwin18.0)
Release notesによると最新版が5.7なので若干古いですね。
zshrcを作ろうとする
面倒だったので.bashrcを.zshrcにコピーしてみたところ、プロンプトがだめな感じになりました…そりゃそうか…
そして.zshrcを空にしてsourceしても戻らず…
色だけつけるように.zshrcに追記してみます。
autoload -Uz colors colors PROMPT='%{$fg\[red\]%}[%n@%m]%{$reset_color%}'
source .zshrc
で読み込みますが変わらず…
ちゃんとした.zshrcを作り直すしかなさそうです…
あとがき
zshに切り替えるのはとても簡単でした。
ですが億劫がってしまったためにプロンプトがおかしなことになるという事故が発生してしまいました…
解決したらまた記事に書こうと思います(戒め)
zsh本体についてはbrewで最新版を入れることもできるようなので、こちらも試してみたいな〜と思っています。