ほのぼのぼのぼの

ひよっこエンジニアのほのぼの記録

気になっていたあのツールを試しました。

最近気になっていたあのツールを試してみました。

SendGrid

クラウド型のメール配信サービス。
無料プランに登録したまま全く使っていなかった SendGrid を Postfix に設定してみました。 ドキュメントに沿って進めていくとあっさり完了します。どちらかといえば、Postfix の設定の方が手間取りました。

管理画面から到達率と開封率が確認できます。URL トラッキングはまだ試していません。ちなみに手元のGmail宛に送ってみたら、開封する前に開封済になっていました。詳しくは確認していませんがフィルタリングとかでしょうか?? あとはWebAPIでの送信も試したいところです。

Postfixでメール送信 - ドキュメント | SendGrid

Datadog

クラウド型のモニタリングサービス。
リソースの利用状況を管理画面から確認できます。
こちらもサーバにエージェントをインストールしたらあっさり完了しました。
Step-by-step Installation に自分の API キーが挿入された形でコマンドが載っているのは地味に嬉しいですね。コピペで動きます。

無料プランなのでアラート通知はないのですが、サーバにログインせずともリソース状況が確認できるのはよいですね。(当然といえば当然なのですが)グローバルIPを付与していないサーバでも利用できました。

WindowsmacOS でも利用可能なので、ワークステーションなどに導入してもよいですね。
かつて5台ほどのPCを束ねたPCクラスタを使っていたことがあったので、このときに知っていたらどれだけ幸せになれたことかと思います。当時はいちいちログインして確認してました。

docs.datadoghq.com

fluentd

ログ収集管理ツール。
複数のサーバ、サービスのログ収集で効果を発揮するそうな(まだ試してません)。
導入については、カーネルの設定変更に躊躇してしまいましたが、ソフトウェア本体はレポジトリ経由であっさり終わりました。

docs.fluentd.org

社会人2年目エンジニアが1年目に心がけたこと。

記憶が曖昧になってしまいそうなので、忘れぬうちにメモ書きとして残しておきます。

いまは社会人2年目のWebエンジニア。サーバサイドエンジニアのつもりなのだけれどフロントも書くし(だが苦手)、インフラも気になる生活をしています。

Web系の開発初めてで学生時代はC++Javaぐらいしか書けなかった自分が、社会人1年目の時に教えられたことを書いてみました。


フレームワークのドキュメントを参照する

入社後の3ヶ月の新人研修を終えて、アサインされたのは Laravel へのリプレイスプロジェクトでした。 Laravel の基礎は社内勉強会で身につけていたものの、本格的な開発は未経験でした。

プロジェクトに配属されて、一番はじめに言われたことは「Laravelの公式ドキュメントを読みなさい」でした。 英語で書かれたこちらのドキュメントです。

laravel.com

ぐぐると日本語の情報がたくさん出てくるのですけど、それを読んでたら「そのページって、うちの開発で使ってるLaravelのバージョンとは限らないし、そもそも誤った情報の可能性あるよね」と叱られました。1

というわけで、実装に困ったら公式ドキュメントの該当部分を参照する習慣をつけました。ドキュメントは体系的に書かれているので、とりあえず通勤中に他の項目も読んでみることにしました。そしたら、普段の開発であまり使わないMVC以外の部分、例えば middleware の役割や Collection の機能、Custom Validation の実装などを知ることができました。開発で必要なライブラリは既に実装されていたのですが、足りないものは実装してみようかなと思うようになりました。

フレームワークの実装を確認する

次に言われたことは「わからない処理があったらまずはプログラムの定義元を確認してね。もちろんLaravelの部分もね。」でした。

ここで、壁にぶつかりました。テキストエディタだと定義元に飛べないときがあるぞ、、!と。 テキストエディタでもアドインを入れたら大丈夫だと思うのですが、自分の場合はIDEに乗り換えました。PhpStormをインストールしました。

諸々設定をして、定義を確認しながら実装を進めるようになりました。定義元の実装を確認してみると、自分がこれから実装しようとしている内容が既に他で実現されていることが多々ありました。余談ですが、PHP7だと戻り値も含め型宣言ができてガチガチに書けるのが好きです。

Laravelの実装も確認する習慣もついたのですが、読み進めるとドキュメントに載っていない機能が実装されていることに気がつきました。結構あります。はい。最近は「これ実装されてるんじゃないかなー」と探すと大抵実装されています。

コードレビューする

そんなこんなで開発を進めていくと、ある日メンションのついたプルリクエスト(プルリク)が飛んでくるようになりました。

チームは自分以外ベテランのエンジニアだったのでコードレビューするなんて恐れ多い(というか指摘するところない・・・)と思っていると、どうも“一年目”のコードレビューの目的は「他でどんな開発が行われているか」「他の人の実装方法から学ぶ」「わからないところは質問する・調べる」ことなのだと理解しました。

自分の初めてのプルリクは100件ぐらいコメントがつくぐらいのとんちんかんな実装でした。ですが、他の人のプルリクに目を通していると、スマートな実装方法を知れたり、変数や関数のイケてる命名などを学べました。そんな過程を経て、プルリクで「修正してね」系のコメントは減っていき、逆に実装方針についての議論のコメントは増えていきました。

そして、気がついたらAssigneeに指定され、自分がコードレビューをするようになっていました。


他にも大切なことは多々あるのですが、技術面で特に心がけたのはこの3つでした。総じてコードを読む習慣はとても役に立っていて、不具合が発覚した際になぜその不具合が起きたのか、他で同じ不具合を防ぐためにはどうすべきか、他に発生しうる箇所はないのか考える癖がつきました。

そんなこんなで2年目を迎えています。

これから

開発環境が整っている会社だとアプリケーションやツール、インフラは当たり前のように動き、ブラックボックスとして使えてしまいます。ですが、それらはどれも誰かが作った・整備したものです。デプロイツールのコードからミドルウェアのパラメータ、運用ツールなど会社の中にはその道のプロが用意したものが沢山溢れています。最近はその構築の話やチューニングの話を伺ったり自分の環境で試してみたりして、知見を増やしているところです。

次に書くのは3年目でしょうか。2年目の夏休みに書いてみました。以上です。


  1. 正確には全く読んでいけないというわけではなく、一次情報を確認してね。という意図が含まれています。

Windows 環境へ PHP 実行環境をお手軽に構築する

chocolatey を使ってお手軽に PHP + composer 環境を構築する話です。

chocolatey のインストール

コマンドプロンプトを管理者権限で起動します。

f:id:u9bo:20170516001144p:plain

以下のコマンドを実行します。

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

PHP のインストール

choco install -y php

なお、バージョンを指定する場合は、

choco install -y php --version 7.0.19

のようにします。

依存解決で、Windows の hotfix を適用した場合は、OS の再起動が必要になることがあるので、その場合は再起動します。

composer のインストール

choco install -y composer

インストール後の確認

おそらくパスが反映されていないのでコマンドプロンプトを新しく開く。このとき管理者権限で起動する必要はありません。

以下のコマンドでインストールできていることを確認します。

php

php --version

composer

composer --version

f:id:u9bo:20170516001141p:plain

インストールできました。

windows10 だともっとお手軽に導入できるので、そちらについてはまた今度。

pepper に ssh 接続してみました

自分でも何を言っているのかわかりませんが。

$ ssh nao@pepper
Password: 
pepper [0] ~ $ uname -a
Linux pepper 4.0.4-rt1-aldebaran-rt #1 SMP PREEMPT RT Mon Oct 3 19:22:50 Local time zone must be set i686 Intel(R) Atom(TM) CPU E3845 @ 1.91GHz GenuineIntel GNU/Linux
pepper [0] ~ $ free
             total       used       free     shared    buffers     cached
Mem:       4049716    1445008    2604708      93824      49020     511360
-/+ buffers/cache:     884628    3165088
Swap:            0          0          0
pepper [0] ~ $ 

CPU は Atom E3845(Bay Trail)で、主記憶 4GBのようです。

Raspberry Pi で時報を作ってみた

指定した時刻にチャイムや音楽を流す装置を Raspberry Pi を使って作ってみました。

指定時刻になると cron で音楽プレーヤを起動させるだけのシンプルな構成です。

環境

初期設定はsudo raspi-configからお好みで。

手順

音声出力先の設定

出力先に合わせて以下の設定をします。

Raspberry Pi 2 の場合,オーディオジャックまたは,HDMI ディスプレイから出力できます。

オーディオジャックから出力する場合

$ amixer cset numid=3 1

HDMI から出力する場合

$ amixer cset numid=3 2

一部モニターでは出力できない場合は,/boot/config.txthdmi_drive=2コメントアウトします。

スピーカーテスト

出力先の設定ができたら,以下のコマンドで音が出るか確認します。

$ speaker-test -t sine -f 1000

補足ですが,sin 波を 1000 Hz で出力しています。

チャイムの再生

チャイムの入手

今回はビックベンのチャイム音を使ってみました。

$ wget http://www.parliament.uk/audio/images/bigben-images/hourlychimebeg.mp3 ~

mpg321 インストー

Raspbian に標準でインストールされているaplayだと MP3 ファイルが再生できないため,mpg321を使います。

$ sudo apt-get install mpg321

インストールが完了したら,先ほど入手したチャイムの音声ファイルが再生できるか確認します。

$ mpg321  ~/hourlychimebeg.mp3

cron へ登録

指定時刻になったらチャイムが流れるように,cron へ登録します。

今回は9時ちょうどと18時ちょうどに流したいので,crontab -eコマンドで以下の設定を行いました。

0 9,18 * * * mpg321  ~/hourlychimebeg.mp3

指定時刻にチャイムが流れることを確認したら完成です。 もし流れない場合は,/var/log/syslogを確認するとよいでしょう。

Hyper-V 上で稼働する仮想マシンの自動ライセンス認証

Windows Server には,仮想インスタンス用のライセンスが含まれていることが知られています。Standard には,2つの仮想インスタンス実行権,Datacenter の場合には,無制限の仮想インスタンス実行権が与えられます。これより,複数の Windows Server が必要な場合でも,仮想マシン上に構成すればライセンス費用を抑えることができます。

これまで,Windows Server の仮想インスタンスのライセンス認証の方法を知らなかったのですが,Datacenter の場合は,Automatic Virtual Machine Activation(AVMA,自動ライセンス認証)を使えばよい,ということがわかったので試してみました。

環境

Automatic Virtual Machine Activation (AVMA)

仮想マシンのインストールの際に,AVMA 用のプロダクトキーを使用すれば良いそうです。

こちらのドキュメントに詳しく掲載されています。

Automatic Virtual Machine Activation

特筆すべきことはこのあたりでしょうか。

  • 仮想マシンのライセンス認証にはインターネットの接続は必要ない
  • 仮想化サーバから仮想マシンへのアクセスなくライセンス認証が可能

マイグレーションなどで,仮想マシンを他の仮想化サーバへ移動した場合でも引き続きライセンス認証されるとのことです。

なお,AVMAのプロダクトキーは以下のとおり(2017/6/24現在,ドキュメントより引用)。

Windows Server 2012 R2

Datacenter: 4TGP-NPTV9-HTC2H-7MGQ3-DV4TW
Standard: DBGBW-NPF86-BJVTX-K3WKJ-MTB6V
Essentials: K2XGM-NMBT3-2R6Q8-WF2FK-P36R2

Windows Server 2016

Datacenter: TMJ3Y-NTRTM-FJYXT-T22BY-CWG3J
Standard: C3RCX-M6NRP-6CXC9-TW2F2-4RHYD
Essentials: B4YNW-62DX9-W8V6M-82649-MHBKQ

手順

仮想マシンのインストール時に,インストールしたい Windows エディションの AVMA キーを入力します。 今回は,Standard のキーを入力しました。

f:id:u9bo:20170624124325p:plain

AVMAキーに対応したエディションが選択できます。今回は,デスクトップ エクスペリエンスを選択しました。

f:id:u9bo:20170624124340p:plain

インストール後に,以下のコマンドでライセンス認証状況が確認できます。

slmgr -dlv

f:id:u9bo:20170624124402p:plain

ライセンス認証が行われていることが確認できます(一部加工しています)。
仮想マシンからホストマシンの情報が取得できるようです。

Let's encrypt の証明書の更新作業

はじめに

Let’s encrypt の証明書更新作業メモ。cron に登録したら楽だな,と思いつつ3ヶ月に一度コマンドを実行すれば良いだけなので,登録していない。。。でも更新コマンドを忘れちゃうので個人的なメモです。

こんな件名のメールが届いたら行う作業

Let's Encrypt certificate expiration notice for domain "example.com" 

環境

  • linux
  • nginx
  • letsencrypt

実行するコマンド

$ sudo systemctl stop nginx
$ sudo letsencrypt renew
$ sudo systemctl start nginx

証明書の更新中は nginx が止まるのでご注意を。

終わりに

やっぱり cron に登録しよう,そうしよう。