ssh 公開鍵・秘密鍵を作成するとき ssh-keygen で使ってるオプション

ssh 公開鍵・秘密鍵を作成するときに ssh-keygen コマンドで使っているオプションをご紹介します。

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/example.com -C who@example.com
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/yourname/.ssh/example.com.
Your public key has been saved in /Users/yourname/.ssh/example.com.pub.
The key fingerprint is:
SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o.               |
|....o            |
|oEo=.o   .       |
|=.B.o.oo+        |
|=o.* *o.So       |
|=oo + =o.        |
|=... = .         |
|+*..o .          |
|+B*.             |
+----[SHA256]-----+

-t 鍵タイプを指定する(rsa/dsa)
-b 鍵の長さを指定する
-f 出力ファイルを指定する
-C 新しいコメントを追加する

$ ssh-keygen -l -f ~/.ssh/example.com
4096 SHA256:bDiAA/Rpt24cM3nlrCJBrWwsYQvass4z623oDowPIMA who@example.com (RSA)

-l 公開鍵の情報(種別、指紋、コメントなど)を確認する

僕個人の判断としては、2048bit RSA鍵で2030年まで戦えるらしいので当分それでいいと思っています。

という意見があるので、これで良しとしてます。

参考情報

[JavaScript] 小数点以下の桁数を取得する方法

JavaScript で小数点以下の桁数を取得する方法をご紹介します。

JavaScript

続きを読む

[JavaScript] 指定した id, class 名を持つ全ての要素を削除する

JavaScript で指定した id もしくは class 名を持つ全ての要素を削除するメソッドをご紹介します。

jQuery は使わずに pure JavaScript で実装しています。

JavaScript

続きを読む

[Mongoose] model.save({ validateBeforeSave: false }) で validate をスキップできる

Mongoose 4.2.0 から model.save() のときにバリデーションをスキップするためのオプション validateBeforeSave が追加されています。

validateBeforeSave のテストコード test/document.test.js#L462-L473

validateBeforeSave オプションを利用するサンプルコードですが、mongoose のテストコードが直感的に理解できそうでした。

it('allows you to skip validation on save (gh-2981)', function(done) {
  var db = start();
 
  var MyModel = db.model('gh2981',
      {name: {type: String, required: true}});
 
  var doc = new MyModel();
  doc.save({validateBeforeSave: false}, function(error) {
    assert.ifError(error);
    db.close(done);
  });
});

Mongoose 4.2.0 からしか使えないので古いバージョンを利用しているなら早くアップデートすることをオススメします。

参考情報

[Nginx] http を https にリダイレクトする設定 & HTTP Strict Transport Security (HSTS) 対応

Nginx で http リクエストを https にリダイレクトする設定と HTTP Strict Transport Security (HSTS) の設定の2つをご紹介します。

http を https へリダイレクトする設定

以下のように return 301 https://$host$request_uri; の部分で 301 リダイレクトさせてます。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
 
server {
    # 'http2' requires nginx 1.9.5+. If using older nginx, replace with 'spdy'.
    listen 443 ssl http2;
    server_name example.com;
}

HTTP Strict Transport Security (HSTS) の設定

server {
    listen 443 ssl http2;
 
    # HTTP Strict Transport Security: tells browsers to require https:// without first checking
    # the http:// version for a redirect. Warning: it is difficult to change your mind.
    # 
    #    max-age: length of requirement in seconds (31536000 = 1 year)
    #    includeSubdomains: force TLS for *ALL* subdomains (remove if this is not what you want)
    #    preload: indicates you want browsers to ship with HSTS preloaded for your domain.
    # 
    #    Submit your domain for preloading in browsers at: https://hstspreload.appspot.com
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
 
 
    # If you won't/can't turn on HTTPS for *all* subdomains, use this simpler version:
    # add_header Strict-Transport-Security "max-age=31536000;" always;
}

HSTS Preload リストへ登録する

Google では ドメインを HSTS Pre-loaded List に登録するサービス を行っています。記載された手順に従ってドメインを登録すれば、今後ブラウザとそのドメインとの間に安全でない通信は起こらなくなります。これに登録するには Strict-Transport-Security ヘッダに preload パラメータを含める必要があります。

[引用元] HTTP Strict Transport Security – Web セキュリティ | MDN

とのことなので HSTS Preload List Submission から登録しましょう。

HSTS Preload List を登録するための条件として、

  • サブドメインは指定できないのでネイキッドドメインを指定する
  • add_header で includeSubDomains を設定する

などが必要です。

今の時代 GoogleのHTTPSサイト優遇方針で待ったなし! と言われていることもあり、未対応のサイト運営者は早めに対応したほうがよさそうです。

参考情報

[Mac] brew update で Error: /usr/local must be writable! 対応

brew update で Error: /usr/local must be writable! がでたときの対応方法です。

$ brew update
Error: /usr/local must be writable!

調べるとまず brew doctor してみてと書いてあったので、やってみます。

$ brew doctor
 
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
 
Warning: /usr/local is not writable.
 
You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami) /usr/local
 
Warning: /usr/local is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. For example, upgrading
to OS X El Capitan has been known to do this. Some versions of the
"InstantOn" component of Airfoil or running Cocktail cleanup/optimizations
are known to do this as well.
 
You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami) /usr/local
 
Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:
  brew install oniguruma
 
Run `brew missing` for more details.
 
Warning: Your Homebrew is outdated.
You haven't updated for at least 24 hours. This is a long time in brewland!
To update Homebrew, run `brew update`.

sudo chown -R $(whoami) /usr/local しろと書かれているので、実行して brew update を再実行してみます。

sudo chown -R $(whoami) /usr/local

次は update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory ってエラーが発生しました。

brew update
 
/usr/local/Library/Homebrew/cmd/update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory
()
/usr/local/Library/Homebrew/cmd/update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory
Error: update-report should not be called directly!
brew prune

たまに brew update すると苦労しますね・・・。

参考情報

[Git] merged な remote branch を一括削除するコマンド

Git で merged な remote branch を一括削除するコマンドをご紹介します。

Git

続きを読む

[WordPress] AMP プラグインを利用して Accelerated Mobile Pages 対応する方法

WordPress で「AMP」プラグインを利用して Accelerated Mobile Pages 対応した道のりをご紹介します。

「AMP」プラグインをインストールする

まず、AMP を管理画面からインストールして、プラグインを有効化します。

AMP Test ツールで確認する

AMP Test

Not a valid AMP page
Invalid AMP pages will not have AMP-specific features in Google search results

というエラーメッセージが出ていますね。

Prohibited or invalid use of HTML Tag

  • The tag ‘plusone’ is disallowed.
  • The tag ‘share-button’ is disallowed.

不正な HTML タグを確認してみたところ、どちらも WP Social Bookmarking Light プラグインを使って設置しているボタンが原因みたいでした。

WP Social Bookmarking Light の設定を AMP Valid に変更する

Google +1 ボタンは AMP Valid な HTML タグに変更する設定が見当たらなかったので、この機会に削除しました。

Facebook Share ボタンはタグの設定を xfbml から html5 へ変更することで対応しました。

対応後に再び AMP Test をかけてみると Valid AMP page のメッセージが無事、表示されました。

Search Console から Accelerated Mobile Pages のエラーをチェックできる

Accelerated Mobile Pages のエラーは Search Console から確認することができます。

HTML タグの禁止された用法、無効な用法(問題の重大性: 致命的) などの重要な通知

まとめ

AMP 対応しておくと Google に気に入られて SEO 効果もあるかもしれません。

基本的にプラグイン1つで対応できるので、早めに AMP 対応をしておくとライバルサイトに差をつけることができるかもしれませんね。

参考情報

[MongoDB] Storage Engine の確認方法

MongoDB で Storage Engine (ストレージエンジン) を確認する方法をご紹介します。

MongoDB

続きを読む

2016年を振り返る

2016年の振り返り。

仕事

2016年は開発以外の色んな仕事に携われた。

1-3月は自社倉庫の業務改善。4-6月はマーチャンダイジングチームの業務改善。いずれもエンジニアリングをベースにした業務改善で、業務ヒアリングして、開発要件を GitHub issue に作成していくという感じだった。業務ヒアリングしていくと今やらなくていい開発案件もあったりして、優先度調整や期待値コントロールの難しさを体験した。

7-8月はマーケティングチームの業務改善を少しだけやった。期間が短かったのは組織体制が変わるのと、業務改善よりも売上・粗利アップさせるための仕事に方向転換があったためだ。
この期間に、データ分析の真似事も取り組んだ。データ分析は未経験だったので、何冊か本を読んで参考にしながら取り組んだ。

データ分析のために読んだ本

SEOにも取り組んだ。開発以外で社内調整しないといけない部分が多くて、現状まだ上手くいってない。1-8月でエンジニアとしての開発業務から離れていたので、また開発をがっつりやりたいなと思い始めた。というわけで、CTOに相談して開発業務の割合を増やしてもらった。

9月以降は主にエンジニアとしてプロダクト開発に取り組んだ。半年以上、開発から離れていたので戻ってから最初の2週間ぐらいはリハビリ期間みたいな感じで、勘を取り戻すのに苦労した。

フロントエンド JavaScript に苦手意識があったので、Vue.js に苦戦した。

11月末から、熊本でリモートワークして年を越した。

メリットとしては、開発に集中できる時間が増える。

デメリットとしては、スタートアップならではの熱量が伝わりにくい。オフィスの空気感が分からないので、緊急性の高いタスクがあったときに Slack に @channel で叫ばないと (メッセージ) しないといけない。Google ハングアウトの設定やネットワークトラブル問題が尽きない。オフラインコミュニーケーションがグッと減るので、業務上関わりのない人とほとんど接点が無くなる。

自分からお願いしてリモートワークさせてもらってる訳だけど、デメリットの部分を理解して導入しないとストレス溜まるなと改めて感じた。

家庭

5月のGW中に家族が他界した。
必要なときに仕事を休めることの有り難みを感じた。

12月末に第一子が生まれた。立会い出産したかったので、それにあわせて11月から2月上旬まで熊本からリモートワークをしてる。
結婚式や出産などのライフイベントにあわせて、リモートワークをさせてもらえるのは有難い。「いつリモートワークしても大丈夫なように、週1〜2回ぐらいやって、体を慣らしておいた方がいいのでは?」というのがDevチームのトピックとして挙がっている。

勉強

英語学習は途中でやめてしまった。モチベーションが続かなかったので、時期をみて再開したい。

読書は月10冊を目標にしていたけど、実際は月2~3冊ぐらいしか読めなかった。以下の本はどれも、もう一年早く読みたかったと思える良書だった。この点は経験が先か、知識が先かの違いなんだろうけど。

リモートワークで、通勤時間が無くなるので浮いた時間を使って勉強に充てたい。

などを読み直してる。
インプットが多めなので読書感想文みたいなものを、このブログにでもアウトプットしていきたい。

プライベートコードを書く量が少なかった。

今年はまず、フロントエンド JavaScript のスキルアップをしていきたい。他の技術も幅を広げるか深めていくかしていきたい。

総括・来年

20代最後の一年だった。

来年は30歳なので、今まで以上に今後のキャリアやライフプランを具体的にイメージして日々を生きていきたい。