DRYな画面一覧管理。プログラムから画面名を抽出し、esa APIで共有する
週1参戦要員tbpgr(てぃーびー)です。
画面の話題を出す際などに、画面名を一意にして会話をしたい。
Issueの登録をする際に画面名を統一したい。
そういえば画面一覧がなかった。
目視で画面名を確認し、手動で画面一覧を作成しても良いのですが
・漏れる可能性
・タイポする可能性
・めんどくさい
などにより、好ましくありません。
幸い画面名はプログラム内で規則正しく設定されていたため、
プログラムで抽出し、その内容をesa APIでesaに登録・更新することにしました。
1. 前提
2. タイトル抽出プログラム
3. 画面タイトルの抽出を実行
4. esa API 利用準備
5. esa API を利用した画面名登録プログラム
6. 動作確認
1. 前提
システム上での画面タイトルの設定方法を統一しておくこと。
今回は、プログラム内で title = ‘画面タイトル’ の形式で統一されているものとします。
2. タイトル抽出プログラム
Rubyでタイトルを抽出するプログラムを作成します。
下記のプログラムでタイトルの一覧が出力されます。
※仮にカレントディレクトリ内にタイトルを含むプログラムが配置されているものとします
extract_titles.rb
# プログラム上は title = 'タイトル' の形式になっている titles = Dir.glob('*.*').each_with_object([]) do |file, memo| src = File.read(file) src.each_line do |line| line =~ %r{title\s*=\s*'(.*)'} memo << $1 if $1 end end puts titles
esa APIへの登録処理を一気に行わず、中間ファイルに出力しているのは、
他の用途のためにリストを加工する可能性があるためです。
3. 画面タイトルの抽出を実行
extract_titles.rb
$ ruby extract_titles.rb > titles.txt $ cat titles.txt test1 test2 test3
4. esa API 利用準備
・esaのTEAMメニューを選択
・自ユーザーを選択
・Personal access tokensタブを選択
・Generate new tokenをクリック
・Read / Write 双方にチェックをして Token description にAPIの用途を説明する内容を入力
・Saveをクリック
・tokenが表示されるので、内容を保存しておきます
5. esa API を利用した画面名登録プログラム
前提
・ esa-ruby gem を利用
・ 環境変数の管理に dotenv gem を利用
※dotenvについては下記を参照
Ruby | dotenv gem で 環境変数をスマートに管理
仕様
・ 該当エントリがなければ新規登録
・ すでに登録済みなら更新
プログラム
.envにトークン・チーム名を設定します
# 利用準備で取得したtokenを設定 ESA_API_TOKEN=your token TEAM=your team
create_or_update_titles.rb
require 'dotenv' require 'esa' Dotenv.load def titles File.read('titles.txt').each_line.map(&:chomp) end body =< ## 画面一覧 #{titles.map{ |e|"* #{e}" }.join("\n")} EOS name = '画面一覧' category = 'サンプル/プロジェクト/仕様書' # 検証用のためtrueにしてます。実際はfalseが良いです wip = true client = Esa::Client.new(access_token: ENV['ESA_API_TOKEN'], current_team: ENV['TEAM']) response = client.posts(q: "name:#{name} category:#{category}") if response.body['total_count'] == 0 client.create_post( category: category, name: name, wip: wip, body_md: body ) else post_number = response.body['posts'].first['number'] client.update_post(post_number, body_md: body) end
6. 動作確認
新規登録
初回実行時は、新規登録になります。
以下の内容でesaに登録されます。
更新
2回目の実行時はすでに登録済みのため、更新処理になります。
差分を確認するために、画面名test4を追加しておきます。
まとめ
ちょっとしたスクリプトで手動作業によるミスをなくし、
繰り返し保守をする際のコストも削減できました。
esa APIを利用したこの仕組み自体は画面一覧以外にも
応用できそうです。
怠惰、大事。