Skip to content

Add optional SUBMIT_OPENER hook to the submit target#135

Merged
toshi0806 merged 1 commit into
mainfrom
add-submit-opener-hook
Jun 26, 2026
Merged

Add optional SUBMIT_OPENER hook to the submit target#135
toshi0806 merged 1 commit into
mainfrom
add-submit-opener-hook

Conversation

@toshi0806

Copy link
Copy Markdown
Member

概要

make sAtCoder: SUBMIT code タスク)の「提出ページを開く」処理に、任意で差し替え可能な拡張点を追加する。

SUBMIT_OPENER ?= $(HOME)/.local/bin/submit-opener

実行可能な $SUBMIT_OPENER が配置されていればそちらに submit_urlSRC_FILE を渡して委譲し、無ければ従来どおり $(OPEN) で提出ページを開く。

動機

共有ファイルである lib/.support/makefile を各自が編集せずに、「提出ページの開き方」を個人の好みで差し替えられるようにする。デフォルト(opener 未配置)の挙動は完全に従来どおりで、既存ユーザーへの影響はない。

変更点

  • lib/.support/makefile: s: ターゲットに SUBMIT_OPENER フックを追加(未配置時は現状維持)
  • .gitignore: opener の配置先 .local/bin/ を追加

後方互換性

~/.local/bin/submit-opener を置かない限り挙動は不変。OSC52 クリップボードコピーや提出ページ URL の組み立ても従来のまま。

The 'make s' submit step now delegates to an executable $SUBMIT_OPENER
(default ~/.local/bin/submit-opener) when one is present, and otherwise
opens the submit page exactly as before. This lets an individual swap in
a personal opener without editing this shared file. Also gitignore
.local/bin/ where such an opener is installed.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

全体的に変更の意図は明確で、後方互換性も保たれています。1点、実用上問題になりうる箇所を指摘します。

Comment thread lib/.support/makefile
@submit_url=$$(printf '%s\n' "$(TASK_URL)" | sed 's|/tasks/\(.*\)|/submit?taskScreenName=\1|'); \
$(OPEN) "$$submit_url"
@echo "提出ページを開きました。Ctrl+V (Cmd+V) でコードを貼り付けて提出してください"
if [ -x "$(SUBMIT_OPENER)" ]; then \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [MEDIUM] SUBMIT_OPENER のパスにスペースが含まれる場合の問題

$(HOME)/home/user name のようにスペースを含む環境では、[ -x "$(SUBMIT_OPENER)" ] の展開結果が [ -x /home/user name/.local/bin/submit-opener ] となり、シェルの単語分割によって引数が複数に分かれてテストが失敗します。また "$(SUBMIT_OPENER)" の二重引用符はMakeの展開後に付くため、Make変数展開時点ではクォートされていません。

より堅牢にするには、変数をシェル変数に一度代入してからクォートする方法が有効です:

	submit_url=$$(...); \
	opener="$(SUBMIT_OPENER)"; \
	if [ -x "$$opener" ]; then \
	  "$$opener" "$$submit_url" "$(SRC_FILE)"; \
	else \
	  $(OPEN) "$$submit_url"; \
	  echo "提出ページを開きました。..."; \
	fi

ただし、$(HOME) にスペースが含まれる環境は稀であるため、優先度はMEDIUMとします。

@toshi0806

Copy link
Copy Markdown
Member Author

レビュー指摘(SUBMIT_OPENER のパスにスペースを含む場合の単語分割)を確認しました。検討の結果、コード変更は行わないと判断しました。理由は2点です。

1. 現コードは既にスペースに対して安全(指摘の前提が本コードには当てはまらない)
レシピ中の [ -x "$(SUBMIT_OPENER)" ] の二重引用符は makefile のレシピ文字列の一部で、Make の変数展開後にシェルが解釈する時点でパスを囲んだ状態になります。Make は引用符を解釈せず単に変数を置換するだけなので、展開結果は [ -x "/home/user name/.local/bin/submit-opener" ] となり、シェルはクォートされた 1 引数として扱います(単語分割は起きません)。

実機検証(HOME にスペースを含む …/sp ace で再現):

$ make -f mk_space test
HOOK BRANCH OK -> would run: [/…/sp ace/.local/bin/submit-opener]
exit=0

スペース入りパスでも正しくフック分岐に入り、フォールバックに落ちません。委譲時の "$(SUBMIT_OPENER)" "$$submit_url" "$(SRC_FILE)" も同様に各引数がクォートされています。

2. 運用環境では HOME にスペースが入らない
本フックは atcoder-env の Dev Container 内で動作し、HOME/rootdevcontainer.jsonworkspaceFolder: /root)です。スペースを含むホームパスは生じません。

以上より、堅牢性・運用の両面で追加対応は不要と考えます。指摘自体も「$(HOME) にスペースが含まれる環境は稀」と MEDIUM 据え置きとされている点とも整合します。

@toshi0806
toshi0806 merged commit 48305fe into main Jun 26, 2026
1 check passed
@toshi0806
toshi0806 deleted the add-submit-opener-hook branch June 26, 2026 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant