備忘録 ~趣味に没頭できるといいなぁ~

半ば趣味、半ば勉強で身につけた技術に関する忘備録、のはず... 不定期更新です。

ArchLinuxにDockerをインストール

dotfilesを気軽に試せる環境が欲しく、ArchLinuxにdockerを導入したとの作業ログです。

Dockerの導入

公式(Arch Linux — Docker-docs-ja 1.13.RC ドキュメント)に従って導入する。 至ってかんたんで、以下のコマンドを打てば良い。

sudo pacman -S docker

sudoを使わずコマンドを実行したいので、dockerグループに追加する。

sudo usermod -aG docker `whoami`

起動設定

PC起動時に開始するには、この設定が必要。

sudo systemctl enable docker

niftyインターンシップ(2016)

前書き的なこと

 もう,1ヶ月も前のことになるのだが,IoTデバイスを用いた開発インターンというniftyさんのインンターンシップに参加させて頂いた.1ヶ月後ということもあって,詳細に語ることはできないが,今覚えている内容ぐらいは残しておきたいのでアウトプットする.本当はすぐにでも書けばよかったのだが,諸事情によりバタバタしていて後回しにしてしまい反省している.

 とりあえず,私のブログでは細かく伝わらないと思うので,他の人の体験記を参照するとよいと思う.勝手にリンクを貼っていいかわからなかったので,ブログの題名だけ紹介しておく.

 流れや雰囲気的なもの

 さて,リンク先にある「IoTデバイスを使った5days開発インターン」に参加してきた.

ニフティ採用担当Blog: インターンシップ情報

 ざっくりいうと,センサとかデバイスを使ったプロダクト作ろうぜなイベントだった.初日は,割り振られたチーム間での自己紹介,大きく2グループに分けて取り組んだレクレーション(内容は秘密),アイデアソン(の練習って2日目だったかな?),アジャイル開発についての講習,使えるデバイスの紹介などがあった.2日目は,アイデアだしや合間合間に会社の紹介などがあった.3日目からは,実際に取り組んで中間発表があり,4日目が実質開発に取り組むことができた時間だった.5日目は最終発表の資料作りや練習があったので,予定としてはかなりキツキツだったと思う.

 と上記したが,記憶が曖昧なので,細かい流れや取り組んだ作業は前後していると思う.

取り組んだ内容

 私たちのチームが作成したプロダクトは,電気ショックで目を覚ましてくれるウェアラブルバイである.目的地駅に近づくと電気ショックで起こしてくれるというもので,似たようなデバイスもあるが,今回開発したプロダクトの強みは,位置情報から判断して起こしてくれること,電気ショックなので静かに起こしてくれること,電気ショックの強弱を制御できることにある.これにより,競合製品にはない価値を生み出すことができた.特に,徹夜での勉強や遅くまでの仕事,フラフラに酔うまで飲んだ人などは,目的地を乗り過ごしてしまうことも多いと考え,それらの人を対象に寝過ごし防止につながるプロダクトの開発を行った.

 作業内容としては,まずコンセプトを決めることから始めた.しっかりとコンセプトを決めておけば,方向性を見失うことがないだろうという考えがチーム全員にあり,実際に何をすればいいか迷ったときの指標になった気がした(個人的な見解).しかし,使ってみたいデバイスがあって,何度かコンセプトが揺らいでしまい,なんだかんだで少しそれてしまった.

  次に,アジャイル的な手法を使って,取り組むべき項目(タスク)を細かくわけ,タスクにかかる時間の見通しなどを行った.これは特に難しく,最初からピッタリの時間を当てることはまず無理だと思った方がいいだろう.最初は何鬼畜な作業をさせてんだよ,と考えなくもなかったが,最初から想定通りにいかないことが普通で,終わりそうにないときは1つのタスクの中にまだ細分化できる作業がないか,時間がかかるのなら一旦止めて他の作業をするべきではないか,などを話し合う必要があるということを教わり気持ちが楽になった.

  そのあとは,実際にそれぞれが作業に取り掛かり,その過程で発生した問題は作業を一旦止めて班で共有し,対策を考えて対策に必要なタスクを細分化,振り分けるということを毎回繰り返していった.最終的には動くものができ,やっとこさできたぜという達成感と最終発表までに間に合ったという安心感から,なんとも言えない気持ちだった.

 最終発表は大トリをつとめることになり,他のチームからクオリティの高いスライドとデモ※洗礼されたコンセプトや使い方※を見せつけられ,「これやべんじゃね?」と焦りながらも発表に望んだ.結果から言えば,アイデア賞を頂くことができ,非常に良い成果を収めることができた.これもひとえに,みなさんのおかげであると考えていて,実際にチーム名にしちゃうほどお世話になりました.

※大げさな表現に見えるぐらい,プレッシャーのかかる良い発表だった

チーム開発で感じたこと

 とりあえず,わからないところは人に聞いたり,相談するのが一番と感じた(実際,10時間ぐらい無駄にした).いつまでも,悩み続けて時間をロスするのは実に勿体無い.

完成させて...

 使用する技術や環境の選択,詰まった時の早めの方向転換などが非常に大切だと感じた.特に今回使用した技術は目的に対し最適ではなかったと思う.また,最後まで一通り完成させることで,達成感,モチベーションの向上を感じることができた.さらに,完成させたことにより一安心でき余裕も出てくるので,(少なくとも自分は)クウォーリティーを上げようとするモチベーションの向上につながるのではないかと考えている.

raspberry piでgitサーバ環境を構築

前回の続きとして、gitサーバを構築します。 sshの部分は、自分の環境で適宜行ってください。 といっても、過去に行っていらっしゃる方も多いので、あくまでもメモということで。

参考にさせていただいたサイトです。
Macにgitサーバーを構築してgit://(gitプロトコル)でアクセスできるようにする方法 | Macとかの雑記帳

サーバ側

sshでraspberry piにアクセスし、作業を行います。
直接、raspberry piを操作しても大丈夫です。

$ ssh ssh-pc
$ mkdir git-server
$ cd git-server
$ mkdir test.git
$ git --bare init

その前に、gitを入れてない人はapt-get等を利用して導入しておきましょう。

クライアント側

ローカルリポジトリの作成を行います。

$ cd ~
$ mkdir git-local
$ cd git-local
$ mkdir test
$ cd test
$ git init

適当にファイルを作成して、コミットします。

$ touch README
$ git add README
$ git commit -m "add README"

そして、リモートリポジトリにデータを送信します。

$ git remote add origin ssh-pc:git-server/test.git

以降、更新したらaddcommitpushを行うようにします。

$ git add .
$ git commit -m "update"
$ git push origin master

RSA公開鍵認証によるssh通信の設定

パスワードではなくRSA公開鍵による認証でssh通信を行うように設定したので、その時の手順をメモしておきます。

導入環境

サーバ:raspberry pi(B+)
クライアント:mac mini

鍵の生成

クライアントで鍵の生成を行います。

$ cd ~  
$ mkdir .ssh  
$ cd .ssh  
$ ssh-keygen -t rsa  

と打ち込むと

Generating public/private rsa key pair.  
Enter file in which to save the key (/Users/User/.ssh/id_rsa):  
Enter passphrase (empty for no passphrase):   
Enter same passphrase again:  

と聞かれるので、上から順に、鍵の名前(defaultではid_rsa)、パスワード、パスワードの確認の順に記入します。全てEnterを押し、記入しなくても作成できます。

$ ls

コマンドで確認すると、id_rsa(秘密鍵)、id_rsa.pub(公開鍵)が作成されているのが確認できます。

鍵の登録

クライアントで作成した、公開鍵をサーバに送ります。
今回はscpコマンドで送信しました。

$ scp id_rsa.pub 送信先ユーザ名@送信先アドレス:~/.ssh

コマンドの記述は、環境に合わせ適宜行ってください。 サーバに送った公開鍵を登録します。
ここからは、サーバ側での操作になります。

$ cat id_rsa.pub >> authorized_keys  
$ rm id_rsa.pub  

上記のコマンドで登録完了です。id_rsa.pubは削除しておきましょう。

通信の簡略化

以上の登録までで、パスワードを利用せずにssh接続できるようになりました。
しかし、アドレスの記述をするのも面倒くさいので簡略化します。 まぁ、参考程度に。
クライアント側での操作です。

$ pwd  
/Users/user/.ssh  
$ vim config  
Host ssh-pc  
  HostName サーバのアドレス  
  port 22  
  User ユーザ名  
  IdentityFile ~/.ssh/id_rsa  

保存し、以下のようなコマンドで接続できるようになります。

ssh ssh-pc

以上です。これで、パスワードなしで通信できます。
一行でアクセスできるようになって便利だ...