メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

GitHubのコミット履歴にVerifiedマークを付けるためにGPGの設定をした (Windows編)

Mac編はこちら

ryoichi0102.hatenablog.com

Windows

GPGインストール

公式サイトよりダウンロードします。
ページ内の最初のリストはソースコードです。その次のリストがバイナリなので、この中から Simple installer for the current GnuPG をダウンロードします。

GnuPGのダウンロード

ダウンロードしたらインストーラー (gnupg-w32-2.2.13_20190212.exe) を起動します。ウィザードが立ち上がるので Next⇒Next⇒Install⇒Next⇒Finish って感じです。

インストールが完了したらコマンドラインを立ち上げてgpgコマンドを打ってみます。

C:\Users\my-user-name> gpg
gpg: keybox'C:/Users/my-user-name/AppData/Roaming/gnupg/pubring.kbx'が作成されました
gpg: *警告*: コマンドが指定されていません。なにを意味しているのか当ててみます ...
gpg: 開始します。メッセージを打ってください ...

^C

後の手順は先日書いたMacでの手順と"ほぼ"同じです。同じな部分は箇条書きで紹介。

  • gpg --full-generate-key
  • gpg --list-secret-keys --keyid-format LONG
  • gpg --armor --export ○○○
  • 結果をコピーしてGitHubのSettings⇒SSH and GPG keys⇒New GPG Key
  • git config --global user.signingkey ○○○
  • git config --global commit.gpgsign true

っときっとここまでは順調に進むと思いますが、コミットしようとすると次のようなメッセージが出ることがあります。

> git commit -m "test"
gpg: skipped "8H7G6F5E4D3C2B1A": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

ぐぬぬこれだからWindowsは…

解決方法はgitの設定でgpg.programにgpg.exeの場所を教えてあげる必要があります。

> git config --global gpg.program "C:\Program Files (x86)\gnupg\bin\gpg.exe"

これでWindowsでも無事にVerified署名付きでコミットできました!

参考

stackoverflow.com

GitHubのコミット履歴にVerifiedマークを付けるためにGPGの設定をした

Verifiedマークをコミットリストに表示させる

環境

macOS Mojave 10.14.2
Homebrew 2.0.2

Verifiedマークとは

コミットリストのこんなマーク。署名付きのコミットであることを表しており、GitHubによるとコミットの信頼性が高まるよ、とのこと。
図で一番最初のコミットにVerifeidが付いているのはWebで操作したためです。何も設定していないでコミットした他の変更はVerifiedマークが付いていません。

Verifiedマーク

なんかカッコイイので付けることにしますw

手順; コマンド

Macの場合インストールはbrewです。

$ brew install gnupg

インストールが完了するとgpgコマンドが実行できるようになるので、次のようなコマンドでバージョンを確認するなどして、インストールの完了を確認します。

$ gpg --version
gpg (GnuPG) 2.2.13
libgcrypt 1.8.4
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /Users/my-user-name/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

実際にGPGキーを生成するコマンドは次のとおり。
ウィザードが出てきますので入力していきます。

$ gpg --full-generate-key
gpg (GnuPG) 2.2.13; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSARSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) [エンターキー]
鍵は無期限です            
これで正しいですか? (y/N) y
                                    
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: ******** ********
電子メール・アドレス: ********@users.noreply.github.com
コメント: GitHub
次のユーザIDを選択しました:
    "******** ******** (GitHub) <********@users.noreply.github.com>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

途中、謎の文字化けしたメッセージが出てきます。きっとテキストでウィンドウを表現しようとして文字化けしているんだと思います。そのままTabでOKらしい部分にフォーカスをあててEnterを何度かしてみましたが、ウィザードが進みませんでした。
ここではパスフレーズとしてGitHubのパスワードを入力しました。

┌──────────────────────────────────────────────────────────────┐
│ ?~V??~A~W?~A~D?~M??~B~R?~]護?~A~Y?~B~K?~A~_?~B~A?~A??~@~A    │
│ ?~C~Q?~B??~C~U?~C??~C??~B??~B~R?~E??~J~[?~A~W?~A??~A~O?~A??~A~U?~A~D?~@~B
│                                                              │
│ ?~C~Q?~B??~C~U?~C??~C??~B?: ________________________________________
│                                                              │
│         <OK>                            <?~B??~C??~C??~B??~C?(C)>
└──────────────────────────────────────────────────────────────┘

こんな感じのメッセージも出ることがあるかと思います。Enter。

┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ ?~C~Q?~B??~C~U?~C??~C??~B??~A~L?~E??~J~[?~A~U?~B~L?~A??~A~[?~B~S?~A??~A~W?~A~_ - ?~@~Z常?~A~S?~B~L?~A??~I??~A~O?~A??~A~D?~@~C?~A~H?~A??~A~Y!                             │
│ ?~M??~A??~U?~A??~]護?~B~B?~E?~A?~A??~A~W?~A??~A~D?~A~S?~A??~B~R確?~M?~A~O?~A??~A~U?~A~D?~@~B                                                                             │
│                                                                                                                                                                          │
│        <?~A??~A~D?~@~A?~]護?~A??~E?~A?~A~B?~B~J?~A??~A~[?~B~S>                                                  <?~V??~A~W?~A~D?~C~Q?~B??~C~U?~C??~C??~B??~B~R?~E??~J~[?~A~W?~A
??~A~O?~A??~A~U?~A~D>──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

ウィザードに戻りました。他の操作を〜の部分などが表示されて進んでいるのが確認できると思います。

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か               
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
gpg: /Users/my-user-name/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵8H7G6F5E4D3C2B1Aを究極的に信用するよう記録しました
gpg: ディレクトリ'/Users/my-user-name/.gnupg/openpgp-revocs.d'が作成されました
gpg: 失効証明書を '/Users/my-user-name/.gnupg/openpgp-revocs.d/A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。

pub   rsa4096 2019-02-21 [SC]
      A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0
uid                      ******** ******** (GitHub) <********@users.noreply.github.com>
sub   rsa4096 2019-02-21 [E]

無事に生成されたようです。確認コマンドは次のとおり。
sec rsa4096/ に続いて表示されている文字列がidです。

$ gpg --list-secret-keys --keyid-format LONG
/Users/my-user-name/.gnupg/pubring.kbx
gpg: 信用データベースの検査
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深さ: 0  有効性:   6  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 6u
/Users/my-user-name/.gnupg/pubring.kbx
-------------------------------------
sec   rsa4096/8H7G6F5E4D3C2B1A 2019-02-21 [SC]
      A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0
uid                 [  究極  ] ******** ******** (GitHub) <********@users.noreply.github.com>
ssb   rsa4096/01A23456789012B3 2019-02-21 [E]

設定を間違えて生成してしまったなどの場合は --remove-secret-key で削除できます。この場合も文字化けウィザードが出てきますが、Enterで続行できます。

$ gpg --delete-secret-keys 8H7G6F5E4D3C2B1A
gpg (GnuPG) 2.2.13; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


sec  rsa4096/8H7G6F5E4D3C2B1A 2019-02-21 ******** ******** (GitHub) <********@users.noreply.github.com>

この鍵を鍵リングから削除しますか? (y/N) y
これは秘密鍵です! 本当に削除しますか? (y/N) y

先程の確認コマンドで表示したリストの中のsecの方の文字列をコピーしてexportします。

$ gpg --armor --export 8H7G6F5E4D3C2B1A
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFxuek8BEADG0+XqpW6ZwfAlxGSR0zoDEoIRhMnbIlhGutO5dXpAM5WxAubc
(中略)
=1RsF
-----END PGP PUBLIC KEY BLOCK-----

長ーい文字列が表示されますので、頭の-----から終わりの-----まで選択してコピーします。
それをGitHubのSettings ⇒ SSH and GPG keysに貼り付けます。
https://github.com/settings/keys

New GPG key

git configで署名付きの設定を行う

ここからgit conifgでコミットする場合に署名を付ける方法と、署名のキーの指定を行います。コマンドには --global オプションが付いていますが、各リポジトリで別々に指定したい場合は --global オプションではなく --local オプションを指定するか、何も指定しないよう(デフォルト)にします。

まずは、署名キーの設定です。次のコマンドは、"署名を付ける場合"に指定されるキーです。

$ git config --global user.signingkey 8H7G6F5E4D3C2B1A

この時点でコミットしてもVerifiedマークは付きません。コミットする場合 -S オプションを指定して、コミットに署名を付けます。

$ git commit -S -m "Your commit message."

とうぜん、毎回-Sを付けるのは面倒なので、常に署名がつくようgit configで設定します。

$ git config --global commit.gpgsign true

ためしに何かしらコミットしてみます。

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

初回のみ、コミットをする時にパスフレーズを聞かれます。

┌──────────────────────────────────────────────────────────────────────────────┐
│ OpenPGP?~A??~X?~F?~M??~A??~C??~C~C?~B??~B~R解?~Y??~A~Y?~B~K?~A~_?~B~A?~A??~
│ ?~E??~J~[?~A~W?~A??~A~O?~A??~A~U?~A~D:                                       │
│ "******** ******** (GitHub) <********@users.noreply.github.com>"             │
│ 4096?~C~S?~C~C?~C~HRSA?~M?, ID 9431AFBD08C2B327,                             │
│ ?~\?~H~P?~W??~X 2019-02-23.                                                  │
│                                                                              │
│                                                                              │
│ ?~C~Q?~B??~C~U?~C??~C??~B?: __________________________________________________
│_____                                                                         │
│           <OK>                                        <?~B??~C??~C??~B??~C?(C)
>──────────────────────────────────────────────────────────────────────────────┘

さきほど入力したパスフレーズを入力して乗り切ります。

$ git push -u origin master

これで晴れてVerifiedマークが付きました!

f:id:ryoichi0102:20190223153310p:plain

参考

help.github.com

今年買ってよかったもの 2018

学びはないかもm(_ _)m

2018年ももう終わり

昔流行ったエントリーですが、いろいろIoTをはじめてから機器が増え始め…
2年前ぐらいから加速し初めて 節操なく 機器が増えていったので、せっかくなので記録しないと…ということで年末エントリーです。

では本題、今年買ってよかったもの

スマートスピーカー

世の中的にも2018年これが入る人はある程度居るのではないでしょうか。
個人的には生活が少し良くなったことよりも、社内勉強会のモチベーティブな再開や、スキルをストアに公開したり、スマートスピーカーを通して外の世界での色々な出会いが生まれたりなど充実した1年を過ごせました。

AWS EC2リザーブインスタンス (Windows)

普段Macを使っており家ではWindows機"も"使うのですが、家でがっつりPCに向かうことが年々少なくなってきました。移動中Macで作業しているときにWindowsでしか使えないアプリな用途があると手が止まって作業が遅れたりするのがもどかしかったのです。

EC2インスタンスがあれば、Macからリモートデスクトップで入ってファイルコピーしてそのまま作業できます。リザーブド(予約)で最大54%オフ。
ブートキャンプとかはやりたくなかったので、これで満足してます。

ちなみに用途とは、IrfanViewとかMP3TAGとかWinMergeです。
またこのマシンにはNode.jsとPuppeteerを入れてJenkinsで回したりして色々な自動化をやってたりもします。

買ってはいませんが、Puppeteerといえば本を執筆させて頂いたのもありがたい経験でした。

ryoichi0102.hatenablog.com

個人名刺

今年は過去ないぐらい勉強会やユーザーグループに参加しました。
そもそもDevRelの流れもあったのか例年よりこういった会も多かったような気もします。
そんな時個人名刺があると気合が伝わるというか、自分の気持ちの問題もありますが、持ってる人は持ってるものです。
会社の名刺と個人名刺を渡すと、最初は個人名刺しか出してくれなかった人が会社名刺を出してくれたりetc

印刷は普通にラクスルを使いました。

印刷のことなら格安・激安の印刷通販【ラクスル】

Monkish Brewing Co. / On the 6 をはじめとしたNew England IPA

New Englang IPAというスタイルのクラフトビールです。(正確にはこれは買っておらずシェアで頂いたものです)
IT関係ないので手短に紹介しますが、まわりが盛り上がってたブームが遅れて来ました。

良いお年を!

来年は「IT系今年買ってよかったものアドベントカレンダーとかやってみたい。