Nginxをインストール
年間契約してからずっと眠っていたさくらのレンタルサーバ(Debian)にNginxをインストールして、Webサーバを構築してみます。
環境
さくらのVPSに作ったDebian9(stretch)
インストール
nginx: Linux packagesにインストール手順が書いているのでこの通りにやる。
1.先にGnuPGというツールのインストールが必要らしいので入れる。この通りに実行。
$ sudo apt install curl gnupg2 ca-certificates lsb-release
2.今回は安定版をインストールするので、安定版のパッケージをリポジトリに追加するための設定を行う。この通りに実行。
$ echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
3.公式のNginx署名鍵をインポートする。この通りに実行。
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
4.鍵が正しく登録されていることを確認。この通りに実行。
$ sudo apt-key fingerprint ABF5BD827BD9BF62
5.リポジトリを更新して、Nginxをインストールする。
$ sudo apt update $ sudo apt install nginx
ちなみにアンインストールをする場合のコマンドは
apt remove nginx
。
6.インストールできたか確認
$ sudo nginx -v nginx version: nginx/1.10.3
起動確認
状態を確認する。[Active]がinactive(dead)になっているので停止中。
$ sudo systemctl status nginx
Nginxを起動する。[Active]がactive(running)になっているので起動できた。どれどれ確認。 「Welcome to nginx!」と表示されていればOK!
$ sudo /etc/init.d/nginx start $ sudo systemctl status nginx
ちなみに停止するときはこれ。
$ sudo /etc/init.d/nginx stop
おまけ
実は最初に起動したときはこんなエラーがでた。「80番ポートは既に使われている」と言われてしまっている。
以下のサイトの手順で、プロセスをkill してからもう一度起動したらうまくいった。
Debian9でsudoコマンドを使えるようにする
eginxをインストールする前に大事なことを忘れてました。
これまで学習するときには、さくらのレンタルサーバーのお試し期間を利用して無料で使っていたのですが、今後環境を構築していくとやったことを残しておきたくなるので年間契約に変更しました。 そのときにこれまで使っていたサーバーを残すのではなく新規契約にしたので、今OSすら入っていない状態なのでした。
そんなわけでDebianのインストールから地道にやり直しているのですが、Debian9ではsudoがデフォルトで使えるようになっているわけではないので、sudoの設定も行います。
インストール
rootユーザーに変更してからsudoのインストールを行う。
$ su - # apt install sudo
ユーザーを追加
rootユーザーのままsudoの設定ファイルを開く。以下のコマンドを実行。
# visudo
”#Allow members of group sudo to execute any command”の下にsudoを使いたいユーザーを追加する。*1
username ALL=(ALL:ALL)ALL
nanoというテキストエディタで起動していた場合、Ctrl
+o
のあとにEnter
を押して保存、Ctrl
+x
で終了。
ここまでで必要な準備はおしまい。rootユーザーを終了する。
# exit
sudoコマンド実行
sudoが使えるようになりました。
参考サイト
Debianでsudoが使えなかったことのメモ - pogin’s blog
*1:あ、タブのインデントが揃ってない
GWの学習予定
GWに勉強したいことまとめ。娘'sは合宿で家を空けるし家事は少なくてすむし、そんなに無理な予定ではないはず…!
チェリー本はAmazonで注文しているので届いたら中身をみてから予定を立てようかな。
4月
nginx
- nginxをさくらのDebian環境にインストールして、なんかのhtmlをおいて、ブラウザからアクセスして表示させる Done!
- VirtualHostの機能を使って、複数のドメインのサイトを立ち上げてみる Done!
- SSLに対応したサイトをつくる(Hello,Worldが表示される程度) Done!
vue.js
- vue.jsでHello,Worldを表示させる Done!
5月
Ruby
- 環境構築 Done!
- チェリー本にそって自習 Doing
Vue.jsの開発環境構築
【注意】
最新のvue CLI バージョンは3系です*1が
この環境構築はvue CLI 2系での手順です。
2系と3系ではパッケージ名が変わっていたり*2、
プロジェクトの作成がコマンド以外にvue UIで可能になるなどの違いがありますのでご注意ください。
JavaScriptもNode.jsもなにも知らない人が、とりあえずVue.jsで"Hello World"を出力するところまでをやってみようと思います。
なにはともあれ環境構築から。
目的
JavaScriptやVue.jsやNode.jsについて何も知らなくても環境構築できること。 なのであまり細かい設定についてはふれず、とにかく起動できるところまでをゴールとします。
環境
- MacBook Pro
- Homebrew
- macOS Mojave 10.4
必要なインストールまとめ
Qiitaなど見てみるといきなりVue.jsだけ入れればいいってもんでもないようなので、環境構築に必要なものをざっくり整理してみた。
- nodebrewをインストール
- Node.jsをインストール
- vue-cliをインストール
- Vue Devtoolsをインストール
環境構築
1. nodebrewをインストール
nodebrewはNode.jsのバージョン管理ツール。Node.jsをインストールするのに必要なので最初に入れる。
$ brew install nodebrew
2. Node.jsをインストール
インストールしたnodebrewを使ってNode.jsの最新版をインストールする。 Vue.jsをインストールするためにnpmを使用するのだが、npmはNode.jsをインストールすると使用可能になる。
npmはNode Package Managerの略で、Node.js用に作られたライブラリやパッケージを管理する為のパッケージマネージャー。
$ nodebrew install-binary latest
最後の引数は[stable:安定版][latest:最新版]です。
なんかエラーがでた。
Fetching: https://nodejs.org/dist/v11.14.0/node-v11.14.0-darwin-x64.tar.gz Warning: Failed to create the file Warning: /Users/izumi/.nodebrew/src/v11.14.0/node-v11.14.0-darwin-x64.tar.gz: Warning: No such file or directory
No such file or directory
って言われている。
このエラーは ~/.nodebrew/src のディレクトリが必要なんだけど存在しないときに出るということなので、~/.nodebrew/src
を作ることで解決できる。*3
$ mkdir -p ~/.nodebrew/src
これを実行してからあらためてNode.jsのインストールを実行したらうまくいった。
インストールされたNode.jsのバージョンを確認。v11.14.0がインストールされているのがわかる。
$ nodebrew ls v11.14.0
使いたいNode.jsのバージョンをインストールしたバージョンのリストから選ぶ。 今回はv11.14.0しか入れていないのでv11.14.0を選ぶ。
nodebrew use v11.14.0
3. PATHを通す
以下を実行して~/.bash_profile
を開く。ファイルがなければ$ touch .bash_profile
を実行して作成する。
$ vi ~/.bash_profile
以下を追加する。
export PATH=$HOME/.nodebrew/current/bin:$PATH
設定ファイルを読み直す。
exec $SHELL -l
4. ここまで確認
各バージョンを確認し、バージョンが表示されればOK。
$ node -v v11.14.0 $ npm -v 6.7.0
5. vue-cliをインストール
vue-cli*4はコマンドラインを使ってvue.jsの開発を支援してくれるツール。vue-cliをインストールする時にwebpackも一緒にインストールされる。
Node.jsをインストールするとnpmが使えるようになるので、npmコマンドを使用してvue-cliをインストールする。
$ npm install -g vue-cli
ここまでできれば環境構築に必要な作業は完了。
6. Vue.js Devtoolsをインストール(推奨)
Vue.js Devtoolsは、Vue.jsの開発をサポートする Chromeブラウザの拡張機能。これを導入するとconsoleを開かなくてもdataの中身などを確認することができデバッグなどが簡単になって便利なので、公式でも入れることを推奨している。
ここにアクセスして追加する。
7.プロジェクトを作成する
ここからは実際に動かすための手順。
今回は"helloworld"というプロジェクトを作成する。init
コマンドの引数は以下の通り。
vue init [テンプレート名] [プロジェクト名]
テンプレートは色々種類がある*5が、どんな時に何を使うのかわかっていないので一番無難そうな「webpack」を選択した。
vue init webpack helloworld
いろいろ聞かれるがとりあえず今回はすべてenter
キーで進めることにした。
8.起動する
プロジェクトの作成が終わるとこんなかんじのことを言われる。
# Project initialization finished! # ======================== To get started: cd test npm run dev
指示通りtestディレクトリに移動してnpm run dev
コマンドをたたきサービスを実行。
すると、以下のようなメッセージが表示されVue.jsのWebサーバが起動する。
I Your application is running here: http://localhost:8080
http://localhost:8080
にアクセスしてみる。
これが表示されれば環境構築は成功!
ちなみにサービスを終了はctrl + c
。
次回は"Hello World"を出力してみます。
参考サイト
fetchとpullと、リモート追跡ブランチ
gitを使っているとcommit、push、pull、mergeあたりのコマンドはよく使うのでだいぶ理解できていると思うんですが、fetchについてはいまだに理解しきれていなかったのでfetchと向き合ってみることにしました。
私が理解したいことは以下の2点です。
- fetchとはなにか
- fetchとpullの違い
リモート追跡ブランチ
まず、fetchを理解する上で欠かせないのが「リモート追跡ブランチ」の存在。
ざっくりいうとローカル側に存在する「origin/master」というやつがリモート追跡ブランチ*1で、その名の通りリモートリポジトリの変更を追いかけているブランチのこと。
ちなみに"origin/master"はリモートリポジトリに存在するmasterブランチの追跡ブランチであり、例えばtestというブランチの追跡ブランチの場合は"origin/test"になる*2。
fetch
fetchをするとリモート追跡ブランチにリモートリポジトリにあるブランチの最新状態が更新される。リモート追跡ブランチが更新されるだけで、ローカルの作業ブランチは影響を受けない。ここがpullと異なる点。
ちなみにfetchは"取ってくる"という意味らしい。
$ git fetch
merge
fetchはリモート追跡ブランチを更新するだけでありローカルの作業ブランチは影響を受けないため、作業ブランチに変更を取り込むにはmergeする必要がある。
$ git merge origin/master
pull
fetchとmergeを一度にやる方法。つまり作業ブランチにもリモートリポジトリの最新状態が即座に反映される。pull = fetch + merge。
$ git pull
まとめ
ローカルには作業ブランチとリモート追跡ブランチという2種類のブランチがあり、リモート追跡ブランチはリモートの変更を管理するブランチ。リモート追跡ブランチだけを最新状態にするのはfetchで、作業ブランチとリモート追跡ブランチの両方を最新にするのがpull。
ふりかえってみると、①リモート追跡ブランチというものの存在をこれまで完全に無視していたこと、②fetchを理解せずにいきなりpullに慣れ親しんでしまったというのがfetchをちゃんと理解できてなかった原因だった気がします。
ああ、スッキリ。
2019/4/12追記 おまけ
origin
の存在についても曖昧な理解だったんですが、特にこれまで気にしなくても困らずにやってこれたのでスルーしてました。
結論からいうとリモートリポジトリにつける名前のことでした。
つまり、
https://github.com/izumii19/xxxxx.git = origin
だということです。
$ git push origin master
は、
”https://github.com/izumii19/xxxxx.git”のmasterブランチに対してpushする
ということ。
ローカルでリポジトリを作成した場合はgit init
したあとに、そのリポジトリをリモートリポジトリに追加するためにgit remote add …
をするのですが、そのときにリポジトリに名前をつけているはずです。*3
$ git remote add origin https://github.com/izumii19/xxxxx.git
originについてとてもわかりやすいサイトはこちら
Agile Japan 2018 札幌サテライトでモブプロを体験してきました
2019年03月16日(土)にAgile Japanの札幌サテライトに参加してきました。
実はスタッフとして運営側で参加予定だったのですが、この数ヶ月前に次女が骨折してしまい手術やら通院やらで運営には全く関わることができず、さらに当日も通院日だったので結局サテライトには午後から参加しました。そのため午後から参加した内容のみ(=モブプロワーク)になります。
会場に到着してすぐ入り口から一番近いチームへ飛び入り参加したため、ワークの事前説明などはまったく聞かない状態で参加しました。多分、チームの皆さんに自己紹介もするの忘れてたと思います。
はじめてのGo言語
今日のお題は「自動販売機をプログラミングする」です。 言語の選択は自由ですがうちのチームは「誰もやったことがない言語でやりたい」という理由でGo言語にしました。 まずは「何を実装すれば自動販売機が完成するか」の設計から始めます。みんなでディスカッションして出てきたのは、こんなタスクでした。
- 商品メニューを作成する
- お金をいれる
- 商品を選ぶ
- 商品が出てくる
- お釣りが出てくる(そのために、お釣りがいくらかを計算する)
これを今から実装していきます。 果たしてGo言語で自動販売機は完成するのでしょうか?
まず最初は「商品メニューを作成する」部分を実装します。具体的には商品リスト(1:水100円、2:コーラ120円、3:コーヒー130円…)を作成します。
「商品番号」「商品名」「値段」を持つ配列を作ればいいというところまではすぐにイメージが湧いたのですが、Go言語での書き方を誰も知りません。ということでナビゲーター全員でググりはじめ、ドライバーに指示を出し色々試してもらいます。
ここで(・∀・)イイ!と思ったのは、名付けなどの「動かすための実装」以外についてもリアルタイムで議論できること。
ひとりで実装していると自分だけの感覚で名前を付けてしまい後からわかりにくいと指摘を受けて修正することもあると思いますが、こういった点についてもその場でディスカッションしながら進めていけます。
「○○だからこういう名前のほうがいいんじゃない?」「ここで改行したほうが見やすくない?」などの会話も頻繁に交わしながら目的の実装も進めていけるので、出来上がったコードは自然と可読性の高いものになりますね。
緊急タスク発生!
ここで緊急の割り込みタスク発生!なんとアイスの差し入れ(o'∀'人)
会場に冷蔵庫はないので、みんなプログラミングの手を止めて緊急アイスタイムに突入です*1。
@nemorineはバナナを食べています。バナナは溶けないので急がなくても大丈夫なんですが、バナナを見ると脊髄反射的に「バナナ=俺が食わなきゃ」になってしまうようです。
まさかの
その後も7分ずつナビゲーターとドライバーを交代し、チームで試行錯誤しながら自動販売機の実装を進めました。 本来であれば「お金をいれる」という機能では、
- 硬貨の種類は、500円や100円などはOKだけど1円や5円はNG
- 500円を入れる場合は、500円玉1枚、100円玉5枚など複数のパターンがありえる
などの考慮も必要なのですが、まずは「お金を入れる⇒商品を選ぶ⇒商品が出る」という一連の動作を完成させたかったので「500円を入れて水を買う」というフローの実現を目指しました。
「 商品メニューを作成する」「お金をいれる」というメソッドまでは全員で協力しながら実装することができたのですが、「商品を選ぶ」メソッドの作成で事件は起こりました。
まさかのどハマり。
「商品を選ぶ」というメソッドは、
- 標準入力から商品番号を入力する("1"と入力)
- 入力した商品番号と商品名を、標準出力に表示する("1:Water"と表示)
という感じで実現したかったのですが、水の商品番号である「1」を入れても画面に「1: Water」と表示されない! 「キーボードから入力した数値をキーにして商品リストの配列を検索し結果を表示する」だけの簡単なプログラム*2のはずなのにどうしても「1: Water」が表示されないんです。 ナビゲーターがググってはドライバーが試すをひたすら繰り返して30分ほど経過したところで、ついに原因を突き止めました。
原因は標準入力から商品番号を受け取った際に改行が入っていて、改行を含んだまま文字列から数値に変換しようとしてエラーになっていたのでした。
そう。ハマる時の原因はいつもこんな些細なこと。でも逆に些細すぎて1人だと見つけられなかったかもしれません。
ハマることさえ楽しい
この時思ったことが、モブプロだと「できない・わからない」ということにあまり罪悪感を感じないということでした。
例えば1人で実装していてハマってしまうと不安になったり焦りを感じてしまうのですが、モブプロの場合は「ここにいる全員がわからないんだから仕方ない」「チームでハマっている」という感覚なのです。
「こんな簡単なところで30分もハマってて誰もわからないなんて」という事実がなんだかおかしくなってきて、だんだんみんなハマりHighみたいになってました。
みんなでハマっていた分、画面に「1: Water」が表示されたときの喜びもひとしおで、みんなで声を出して「YATTA!!」と叫びました。プロのエンジニアがただ「1: Water」と表示することに30分もハマるなんてウケる!
あ、そうそう結論からいうと時間内に「お釣りを出す」の実装が間に合わず、500円を入れて100円の水しか買えないけどお釣りはでない自動販売機、つまり100円の水を500円で売るボッタクリ自動販売機が完成してしまいました。
まとめ
モブプロの良さはなんでもチームで分け合えることだと思いました。
ハマった時わからないときも全員で解決に向けて取り組むので、個人で責任を負うという気持ちにはならず変な罪悪感はほとんど感じません。
逆に何かを達成できたときも「嬉しい」という感情をシェアすることで、何倍も嬉しく感じました。
コードを見ながら議論することでリアルタイムにリファクタリングできるので「レビュー⇒やり直し」というフローも必要ないし、ドライバーとしてタイピングしていない時間もコーディングに参加している感覚があり「チームみんなでコーディングしている」という気持ちになれます。
あんなにハマったのに振り返ってみると楽しい記憶ばかりでした。
プログラミングだけではなく、「モビング」という働き方をいろんなところで実践していけたらいいなぁと思いました。
講師の及部さん(@TAKAKING22)。3月の北海道でも元気に半袖です。
及部さんが書いた当日のブログはこちらです。 ワークショップで行った「Head Firstモブプログラミング」のスライドを見るとモブプロについて詳しく書かれていますのでぜひご覧ください。
Scrum Fest Osaka 2019に行ってきました
2/22(金)-23(土)で開催されたScrum Fest Osaka 2019に行ってきました。
3週間前に娘が右腕骨折、そして前日の震度6弱の地震と、まるで見えない何かに行くことを阻まれているかのような不幸続きで直前までほんとに行けるのかどうか危うい感じでしたが、無事行けてよかったです。
このエントリーでは特にわたしの印象に残ったことを書き留めたいと思います。
基調「公」演がすごい
いきなり2日目の話で恐縮ですが、基調公演がすごかったんです。 最初にオープニングムービーが流れて、「基調講演にオープニングムービーなんて凝ってるなぁ」と思っていたところに、まさかのピアノ生演奏。*1
オープニングムービー&ピアノ生演奏から始まる基調講演ならぬ基調公演。この時点でこの後始まる基調公演に対してもう期待しかないです。
ピアノと共に及部さんハイタッチイン!
グラサンした及部さんが8.6秒バズーカーに見えるのは私だけでしょうか。そしてグラサンをしたきょんさんはYOSHIKIに見えるのは私だけでしょうか。
スピーチ前の演出だけですでにこの懲り様。ここまでの準備だけでも相当大変だったと思います。すごいです。楽しいです。
基調公演の内容は書ききれないので特に自分の印象的だったことだけをいうと、すごい人達も最初は普通の人だったということです。これは私にとってはすごく大事な発見。
私が初めて及部さんの名前を聞いた時は「モブプロのすごい人」と聞いていたし、きょんさんのことは「きょんさんすごいグッとくるプレゼンする人」と聞いていたので、会う前から「なんだかすごい人達」だと思ってたし、実物の2人は間違いなくすごい人でした。
だけどプレゼンの内容は
- 僕たちは普通の人
- やめたくなることや投げ出したくなることが、これまで何度もあった
- でも、他人ではなく自分が変わろう、うまくいかない運命を自分の手で変えてやろうと思って進んできた
というやうな凡人にはグッとくる内容ばかりで1行でまとめるのは恐縮なのですが、それでも無理やり1行でまとめると、
普通の僕たちはめちゃくちゃ失敗や苦労して何度も挫折しかけたけど、その先を見たいという思いでここまで一歩一歩進んできて今がある
というお話でした。
ただ「諦めが蔓延している中でこの人達の才能の蕾を開花させたい」という気持ちで行動できることは誰にでもできることではないので、やはりこういう部分は普通の人にはないものを持ち合わせているんじゃないかと思います。 とても良い話でした。
等身大のセッションが良い
セッションは2トラックで走るのですが好きなセッションをチョイスします。みなさん等身大の内容でとても聞き応えがありました。個人的には成功例ばかりを語っていなかったというところがとても良かったと思っています。
やはり多くの現場ではうまくいくことよりもそうじゃないことで悩んでいたりするので、こういう悩みを抱えているのは1人ではないんだと思えると安心感が湧くし、基調公演のテーマだった楽しさと勇気につなげることができると思いました。
私は最近アジャイルについて人に教えたり広めたりすることが多くなってきた反面、開発から離れることが増え「今開発もしていない自分が、アジャイル開発のなにがしを人に伝えられるのだろうか」ということがずっと気になっていました。自分のアジャイル開発経験はもう過去のものになりつつあるのです。
でも同じジレンマを抱えているという人と「1つのことに力を入れると違うことができなくなるのは悪いことではないんじゃないか」という話ができてなんだか安心しました。
アジャイルコーチと呼ばれる人達はこの辺についてどう思っているのかをもっと聞けばよかったと、北海道に戻ってきてからちょっぴり後悔しています。
楽しませよう感がすごい
スタッフの皆さんのおもてなしを随所に感じました。
◆旅するAgile本箱
まず入り口には旅するAgile本箱。
この本箱はいろいろ旅をするみたいなので、(パスポートの入国スタンプのように)旅した場所でスタンプを残していけると旅してる感がでて素敵かなぁと思いました。
ちなみに私がちら読みして気になったのはファシリテーショングラフィックという議論の見える化について書かれている本。こうやってちら見できるのが楽しいです。
◆Welcome Talk
2日間とも最初にWelcome Talkがあったのでよくありがちな「知らない人達が会場に集まったときに感じるやや緊張感のある空気」を今回は感じませんでした。 北海道のイベントだとどうしてもちょっと雰囲気が固くなりがち。こんな雰囲気いいなぁ。
◆Networking Party
1日目はすべてのセッション終了後にNetworking Partyがあり、豪華なお寿司とオードブルとビールが振る舞われ、知らない人どうしで気軽に話ができるようにセッティングされていました。
お酒大事。ジュースだと知らない人にえいっと話しかける勇気がでない。ビールならできる。
私もお寿司を取ろうと思ってうろついていたところを声かけていただいて名刺交換して話していたら、「僕函館にいました!」とか「おととい札幌にいました」とか、親近感がわく話がたくさんできて一気に距離感が縮まった感じがします。
知らない人と友達になれるのはテンションがあがります。
◆懇親会
Networking Partyの他にも座ってゆっくりと交流できるように懇親会が用意されていました!
大阪名物串揚げをつまみながら。
◆Coffee/Tea Break
疲れがたまる午後3時ころにCoffee/Tea Breakの時間があります。スタバのコーヒー飲み放題!
◆及部さんのお誕生日
及部さん2/22お誕生日だったということでケーキとHappyBirthdayソングの大合唱。こんなサプライズされたらめちゃくちゃ嬉しいですね。ケーキもとても美味しかった(私は誕生日じゃないけど食べた)。
弁当が超絶うまい
2日目にはお弁当が出るのですが、せっかく北海道から来たので大阪観光兼ねて食べに出られたらよかったかなぁと思っていました、最初は。
ところがこのお弁当タイムが想像以上にステキでした。豪華なお弁当4種類から好きなものを選べるようになっていて、見本が置いてあるのですがどれもこれも美味しそう!
私が選んだお弁当はこれです。
もうめちゃくちゃ美味しくて食べ終わってからも「美味しいのでもう1個食べたい」と思っていました。それくらい美味しかったので大満足でした。
手前にある大根の明太子和えはサッパリしていて娘のお弁当にもいいかなぁとか、詰め方盛り方もきれいなので、毎日お弁当作る派としては眺めて良し、食べて良しの◎です。
北海道でお弁当を振る舞う時もこのくらい美味しいお店のお弁当屋さんにお願いしたいなぁ。
まとめ
正直書ききれないですが、来年もまた行きたいと思えるようなとても良いイベントでした。 久しぶりに会った人達に覚えていてもらえたこと、新しい人達と知り合いになれたことがとても良かったです。 札幌でもこんな盛り上がるイベントにしたいなぁと思いました!
*1:これがメチャクチャ上手い。自分もピアノ10年やってたのですがあれだけ長時間演奏しながら最後までクオリティ保つのってかなり集中力いると思うんです。