mimikunの技術メモ

mimikunがプログラミング中調べてわかったことをまとめていくブログです

GitHubの署名付きコミットしたかったので設定した話

タイトル通り.

GPG Keyつくる

これがなきゃ始まらない.

ここ見た: https://help.github.com/en/articles/generating-a-new-gpg-key#supported-gpg-key-algorithms

自分が使っているOS用のGPGコマンドラインツールを入れろって書いてある.

GPG SuiteからGPG Suiteをダウンロードする.

dmgを開き, install.pkgをクリックし, インストーラーを起動する.

GPG Keychainが開くので, 鍵を作成する.

img1 こんな感じで.

有効期限を設定したほうがいいのかもしれないが面倒なので無期限にした.

これで作成完了.

GPG KeyをGitHubに登録する

gpg --list-secret-keys --keyid-format LONG

コマンドで, 公開鍵と秘密鍵の両方があるGPG Keyが見れる.

$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
  ------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

こんな感じになる。 大事なのは, secの3AA5C34371567BD2の部分.

次にこれを実行する.

すると, gpg keyが出てくるので, コピーし, GitHubの"Settings→SSH and GPG Keys"のところに貼り付ける.

$ gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format

パイプでpbcopyに渡してコピーしたほうが楽.

署名付きコミットしてpushしてみる

ローカルリポジトリで署名付きコミットしたい場合は,

$ git config commit.gpgsign true

全てのリポジトリで署名付きコミットしたい場合は,

$ git config --global commit.gpgsign true

そして, コミットするときは, -S オプションを付ける.

$ git commit -S -m "your commit message"

うまく行ってればこんなふうに表示される.

img2 以上.

.devドメインのWebページにアクセスできなかった話

TL;DR

pow が入ってたら今すぐuninstallしろ

何があったの

先日, mimikun.dev を買った.

早速「diary.mimikun.devにURL変えるか!!!」となって変えた.

そしたらこれが出た.

img

何で…?

原因: pow

powが原因だった.

$ curl diary.mimikun.dev

してみた, 結果はここ

  <h1 class="err">Application not found</h1>
  <h2>Symlink your app to <code>~/.pow/diary.mimikun</code> first.</h2>
  <section>
    <p>When you access <code>http://diary.mimikun.dev/</code>, Pow looks for a Rack application at <code>~/.pow/diary.mimikun</code>. To run your app at this domain:</p>
    <pre><span>$</span> cd ~/.pow
<span>$</span> ln -s /path/to/myapp diary.mimikun
<span>$</span> open http://diary.mimikun.dev/</pre>
  </section>

はい, powが原因ですね…

powをuninstall

そもそもpow自体もうメンテナンスされてないので( GitHub もarchiveされてる ) uninstall しちゃいましょう. 代わりにpuma-dev使うといいです.

$ curl get.pow.cx/uninstall.sh | sh

で uninstall できます.

WebAssemblyをやってみる

興味あったのでやってみる. Rustはわからんので, 書いたことのあるC/C++を使う.

公式ページのDeveloper’s Guide にはToolchain入れろって書いてあるけど, だるいのでDockerを使ってみる.

成果物はここに置いてある. mimikun/wasm-sample

mkdir -p $WORKDIR/wasm-sample
mkdir dist
touch hello.c
docker pull trzeci/emscripten
docker run --rm -v $(pwd):/src trzeci/emscripten emcc hello.c -s WASM=1 -o dist/hello.html
#include <stdio.h>
int main(int argc, char ** argv) {
  printf("Hello, world!\n");
}

そのままhtmlファイルを開くと, CORSで弾かれる.

なので, emrunコマンドで開く必要がある.

$ emrun --no_browser --port 8080 .

Dockerで実行する場合はこう (参考: https://puzzle.github.io/tws18-webassembly-slides)

$ docker run --rm -p 8080:8080 -v $(pwd):/src trzeci/emscripten emrun --no_browser --hostname 0.0.0.0 --port 8080 dist/

WebAssembly, うまく使えば便利だと思った.

デフォルトのシェルをfishに変える

今まではずっと zsh + oh-my-zsh を使ってきたがナウい(死語)奴に変えたかったので変えてみた.

まず fish を入れてデフォルトのシェルに変えるところから.

$ brew install fish
$ sudo echo "/usr/local/bin/fish" >> /etc/shells
$ chsh -s /usr/local/bin/fish

fishでは export ではなく set -x環境変数を定義するようで, 早速 .zshrc をコピペしていくつか手直しして source で反映してみたが不具合が出た. 入力できるはずのコマンドが入力できない.

$ cp ~/.zshrc ~/.config/fish/config.fish
$ source ~/.config/fish/config.fish
$ exec $SHELL -l
$ touch
fish: Unknown command touch

なので, 一つずつ試してみて, 何が原因か調べた.

いくつか構文ミスがあって, エラーが出た.

詳しくはここ: https://gist.github.com/mimikun/83c4f385c38ae02ad192141ea7e4660c

主に、 set -x PATH=hoge などとしてるのが多かった. なんでこんな書き方するのかわからんけどそういうもんなんだろうな…

ハマりポイント1: Golang環境変数

$ vim ~/.config/fish/config.fish
# Golang
set -x GOPATH $HOME/go
set -x PATH $GOROOT/bin:$PATH
$ source ~/.config/fish/config.fish
$ exec $SHELL -l
/usr/local/Cellar/fish/3.0.2/share/fish/functions/__fish_pwd.fish (line 1): 
uname
^
in command substitution
    called on line 1 of file /usr/local/Cellar/fish/3.0.2/share/fish/functions/__fish_pwd.fish

多分ダメだったのは2行目の GOROOT のところ. なので, ここを見て設定し直した.

ハマりポイント2: anyenvの設定

普通に set -x PATH $HOME/.anyenv/bin:$PATH だけだと以下のように command not found と出るので少し工夫する.

$ anyenv update
Updating 'anyenv'...
Updating 'anyenv/anyenv-update'...
/Users/mimikun/.anyenv/plugins/anyenv-update/bin/anyenv-update: line 219: goenv: command not found

ここを見て設定した.

set -x PATH $HOME/.anyenv/bin:$PATH
anyenv init - fish | source

プロンプトを自分好みに変える

ここを見て作業した. ここも見た.

理想は以下のような感じ.

➜  mastodon git:(feature/add_pawoo_hashtag_editor) 

ブラウザから設定できるらしいので設定した.

$ fish_config

prompt の Robbyrussell を選択し, set prompt を押すだけで良い.

ghq関係の設定

ここ を見て設定する

$ brew install ghq peco fzf fzy
$ fisher add decors/fish-ghq

fisherを使うので予め入れておく

使い方はCtrl+Gと押すだけ, あいまい検索もできる.

以上

Hugo + Netlify + GitHub でブログを構築する

mimikun blogGitHub PagesからNetlifyに移しました。

手順

まずNetlifyのアカウントを作成します。

Netlify Appにアクセスし、GitHub認証でアカウントを作成します。

New Site from Git をクリックします。

Continuous Deployment で、GitHubをクリックし、認証します。

するとリポジトリが出てきますので、Hugoサイトのリポジトリを選択します。

image1

するとこのようなものが出てくるので、このように入力します。

デプロイするブランチ, ビルドコマンド, 公開ディレクトリをそれぞれ入力します。

僕はこれでうまく行かなかったので、管理画面からBuild environment variablesを設定しました。

image2

すると、ビルドがうまく通りました。

あとは管理画面からURLをconfig.tomlのbase urlと同じものに変えます。

参考にしたサイト

Host on Netlify | Hugo

[SOLVED] Netlify deployment errors, yet, nothing errors on localhost - support - Hugo Discussion

NetlifyでHugoで作った静的サイトをホスティングしてビルドを自動化する – Snaplog

npm install のオプションについて

全然わからないので調べた。

ドキュメントの説明(NPMの場合)

npm installは、指定されたパッケージをデフォルトで依存関係に保存します。 さらに、いくつかの追加のフラグを使用して、どこにどのように保存するかを制御できます。

  • -P, --save-prod: パッケージは依存関係に表示されます。 -Dまたは-Oが指定されていない場合、これがデフォルトです。

  • -D, --save-dev: パッケージはdevDependenciesに表示されます。

  • -O, --save-optional: パッケージは、あなたのoptionalDependenciesに表示されます。

  • --no-save: 依存関係への保存を禁止します。

上記のいずれかのオプションを使用してpackage.jsonへの依存関係を保存する場合、2つの追加のオプションフラグがあります。

  • -E, --save-exact: 保存された依存関係は、npmの既定のセーム範囲演算子を使用するのではなく、正確なバージョンで構成されます。

  • -B, --save-bundle: 保存された依存関係もbundleDependenciesリストに追加されます。

ドキュメントの説明(yarnの場合)

これは公式ドキュメントの方が詳しいだろう。

ちょっと調べてみた。

うん、全然わからん。

例えばどういうタイミングで npm i -D とするのだろうか?

というわけでそもそもdependenciesとは?というところに着目してみた。

そもそもdependenciesとは

公式ドキュメントにあった。

公式見る癖をつけるようにしていきたい。

Specifying Dependencies

プロジェクトが依存するパッケージを指定するには、package.jsonファイルで使用するパッケージを一覧表示する必要があります。 リストできるパッケージには2種類あります:

  • "dependencies": これらのパッケージは、アプリケーションで本番環境で必要となります。
  • "devDependencies": これらのパッケージは、開発とテストのためにのみ必要です。

つまり、productionで必要なパッケージはdependencies で、developmentで必要なパッケージにはdevDependenciesを付けるということだ。

うん。かんぜんにりかいした。

簡単に依存関係を追加する方法

The --save and --save-dev install flags

依存関係をpackage.jsonに追加する簡単な方法(より素晴らしい方法)は、コマンドラインから行うことです。どのようにしたいかに応じて、 - saveまたは--save-devのいずれかでnpm installコマンドにフラグを立てます。そして、その依存関係を使用してください。

  • package.jsonの依存関係にエントリを追加するには:
npm install --save <package_name>
        or
yarn add <package_name>
  • package.jsonのdevDependenciesにエントリを追加するには:
npm install --save-dev <package_name>
        or
yarn add --dev <package_name>

参考

install | npm Documentation

05 - Working with package.json | npm Documentation

yarn add | Yarn

npm からの移行 | Yarn

webpack-dev-serverの`--open`使う時、任意のブラウザで開く方法

僕は色々理由があってMacのデフォルトのブラウザはSafariにしています。

こういう時、webpack-dev-server --openと記述しているとSafariが開いてしまいます。まぁ当たり前なんだけど

ChromeFirefoxで開きたい時どうしたらいいもんかなーって思ってMastodonで投稿したらwebpack-dev-server --open "Google Chrome"ってやるとよいよとリプを貰いました。

mstdn.mimikun.jp

mstdn.maud.io

package.json(修正後)

ダブルクォーテーションで囲まれてるところなので忘れずに\"ほげほげ\"とやっときます。

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --hot --open \"Google Chrome\""
  },