2022/02/23(水)nginxでローカル開発環境向けのhttps環境を作る

更新日:
投稿日:

ローカル環境用の開発ドメインをhttps化する時に使えるやつ
例えばローカル環境に複数のサービスがいて、それぞれをhttps://*.example.com/のようなドメインで管理したい時に使える

確認環境

同じことをすればLinuxとかでも応用できると思う

Env Ver
nginx 1.19.8
mkcert 1.4.3
Windows 10 Pro 19043.1415

手順

  1. mkcertの導入とワイルドカード証明書の作成
    choco install mkcert
    # mkcertを認証局として登録
    mkcert -install
    # 証明書を作成するドメインを列挙
    mkcert example.test *.example.test
    mv _wildcard.example.com+1.* C:/nginx/conf/.ssl/
    
  2. nginxの設定に証明書を記載

    server {
        server_name  dev.example.com;
        listen 443 ssl;
    
        ssl_certificate     ssl/_wildcard.example.com+1.pem;
        ssl_certificate_key ssl/_wildcard.example.com+1-key.pem;
        ...
    }
    

2022/02/13(日)MSYS2でzshのGitプロンプトを快適に使う方法

更新日:
投稿日:

MSYS2でzsh使いたくない?使いたいよね?そう、使いたい!
しかしその上で一つ大きな障害があります
MSYS2のzshでプロンプトにGitのブランチを表示させようとすると微妙に上手くいきません

問題

.zshrcを使ってPROMPTに現在のGitブランチの状態を表示させようとするとフリーズするケースがあります
具体的には以下のような設定を書くとターミナルのサイズ変更時にシェルがフリーズします
原因は不明ですがPROMPT='$(git)'だけでフリーズするのでGit for Windowsとの相性がなにか良くないのだと思っています

# git functions

current_git_branch() {
  (git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
}

parse_git_dirty() {
  local DIRTY=$(git status -s | tail -1)
  if [[ -n $DIRTY ]]; then
    echo "%{$fg_bold[magenta]%})%{$fg_bold[red]%}✗"
  else
    echo "%{$fg_bold[magenta]%})%{$fg_bold[blue]%}✓"
  fi
}

print_git_prompt() {
  local FIND_BRANCH=$(git branch 2> /dev/null | tail -1)
  if [[ -n $FIND_BRANCH ]]; then
    echo "%{$fg_bold[magenta]%}(%{$reset_color%}%{$fg_bold[yellow]%}"$(current_git_branch)$(parse_git_dirty)" %{$reset_color%} "
  else
    echo ""
  fi
}

# setting propmt

PROMPT="
%{$fg_bold[cyan]%}%n%{$reset_color%}%{$fg_bold[blue]%}@%m%{$reset_color%}:%{${fg_bold[green]}%}%~%{$reset_color%}
%(?:%{$fg_bold[green]%}➜:%{$fg_bold[red]%}➜)  %{${reset_color}%}"'$(print_git_prompt)'

RPS1="%(?..%{$fg_bold[red]%} [ %? ]%{$reset_color%}) %D - %*"

解決策1

プロンプト表示に使うgitバイナリだけmsys2の物に差し替えると上手くいくようになります
具体的には以下のようにしてGit for Windowsと競合しないようにMSYS2のGitを構成しPROMPT='$(msys2_git)'のように呼び出してやると上手くいきます

pacman -S git
mv /usr/bin/git /usr/bin/msys2_git

課題

  • msys2/gitをアップデートするときに毎回リネームをする必要がある
  • ここが面倒で脆弱性に繋がる可能性がゼロではない

解決策2

Git for Windowsだけでやる場合の方法です
add-zsh-hook precmdでプロンプトに出したいコマンドを呼び出し、変数の値を書き換えてそれを表示するスタイルでやると上手くいきます

課題

  • プロンプトの速度が遅い
  • プロンプトする時に一瞬フォーカスが飛ぶ(別プロセルがコールされ一瞬窓ができている気がする

2022/01/04(火)Windows + VSCode + Xdebugの環境を作る

更新日:
投稿日:

環境

Windows 10

Env Ver
PHP 8.0.2
Xdebug 3.0.2

php.ini

zend_extension="xdebug-3.0.2-8.0-vs16-nts-x86_64"
xdebug.start_with_request=yes
xdebug.mode=debug

settings.json

別になくてもデバッグは出来る

"php.validate.executablePath": "C:/path/to/php.exe",

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003
        }
    ]
}

2021/11/26(金)nginx上でNext.js 12 SSRをHMRさせる

更新日:
投稿日:

Next.js 11から12にしたらHMRが死んだので復活させるための設定を書いておく

確認環境

Env Ver
nginx Windows-1.21.4
Next.js 12.0.4

設定例

標準状態でnpx nextを叩いた状態を想定している

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen       80;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass  http://localhost:3000;
    }
}

2021/11/10(水)Bash Tips

更新日:
投稿日:

シェルスクリプトが設置されているパスを取得する

  • cwd=$(cd $(dirname $0); pwd)
    • $0はシェルスクリプトのフルパス
    • dirnameでスラッシュから始まるファイル名を除去
    • cdで移動
    • pwdで表示

現在のパスを移動せずにシェルスクリプト内でパスを移動する

これはサブシェルを使うと出来る
サブシェルとは()で囲まれた部分で、この中では別のシェルが動いている
例えば次のスクリプトはfoo/に移動し中のファイルリストを表示するが、2行目では現在の位置にあるファイルリストを表示するため移動していない
コマンド展開記法$()もサブシェルが動いている

(cd foo/; ls -la)
ls -la

複数コマンドをワンライナーで実行する

;

  • 以下のように書くと連続で線形実行される。手前が異常終了しても続く
    • curl; echo 2;

&

コマンドの末尾に&をつけるとバックグラウンドで実行される

  • 以下の例では左がバックグラウンド、右がフォアグラウンドで実行される
    • echo 1 & echo 2

&&

AndAlso的な動きをする

  • 以下のように書くと連続で線形実行される。手前が異常終了すると続かない
    • curl && echo 2

|

コマンドの末尾に|をつけると標準出力が次にリダイレクトされる

  • 以下のように書くと連続で線形実行される。手前の標準出力が次にリダイレクトされる
    • echo 1 | xargs -I{} echo {}2

||

OrElse的な動きをする

  • 以下のように書くと連続で線形実行される。手前が異常終了した場合のみ次が動く
    • curl || echo 1