Apache Projects様を引用してブログネタを決めるためのツールを作成しました
今回は、私が今しているセルフエンドレスアドベントカレンダーのネタを決めるためのツールを作成しましたので紹介します。
対象とするものは?
今回はApacheのプロジェクト一覧からランダムに抽出されたプロジェクトを対象とするようにしました。なお、これはネタが思い浮かばなかったり、思い浮かんでるけどなんか違うものがいいなと思った時に実行するようにします。
作成したツールについて
今回はPythonを使ってツールを作成しました。
まずは先ほどのApache Projectsの一覧からアイテムをテキストファイルにコピーしました。
一部のみ表示していますが、全てで390行あるようでして、一年以上はネタ切れに困らないことになりますw。
Apache JDO
Apache .NET Ant Library
Apache Accumulo
Apache ActiveMQ
Apache AGE
Apache Airavata
Apache Airflow
Apache Allura
Apache Ambari
Apache Amoro (Incubating)
Apache Anakia
Apache Annotator (Incubating)
Apache Answer
Apache Ant
Apache AntUnit
Apache Any23 (in the Attic)
Apache Apex (in the Attic)
Apache APISIX
Apache Archiva (in the Attic)
Apache Aries
Apache Arrow
Apache AsterixDB
Apache Atlas
Apache Avro
Apache Axiom
Apache Axis2
Apache Baremaps (Incubating)
Apache Batik
Apache Beam
Apache Beehive (in the Attic)
Apache BifroMQ (Incubating)
Apache Bigtop
Apache BookKeeper
Apache Brooklyn
Apache bRPC
Apache Buildr (in the Attic)
Apache BuildStream
Apache BVal
Apache Calcite
Apache Camel
Apache CarbonData
Apache Cassandra
Apache Causeway
...一部抜粋
それでは次にこれらの中から対象とするプロジェクトを選択するPythonコードを作成します。今回は過去に選択したアイテムはSQLite3にて管理するようにしました。コードは以下になります。
from random import choice
import sqlite3
INPUT_DATA = "items.txt"
def select_item(conn):
with open(INPUT_DATA, "r") as f:
lines = [line.strip() for line in f.readlines()]
cur = conn.cursor()
cur.execute("SELECT project_name from selected_items;")
previous_selected_items = [item[0] for item in cur.fetchall()]
if len(previous_selected_items) == len(lines):
print("No project remains")
return
while True:
selected_item = choice(lines)
print(f"{selected_item=}")
if not select_item in previous_selected_items:
cur.execute(f"INSERT INTO selected_items(project_name) values('{selected_item}')")
conn.commit()
break
if __name__ == "__main__":
conn = sqlite3.connect('./SELECTED_ITEMS.db')
conn.execute('CREATE TABLE IF NOT EXISTS selected_items(id INTEGER PRIMARY KEY AUTOINCREMENT, project_name STRING)')
select_item(conn)
conn.close()
ロジックとしては以下になります。
- items.txtに保存されたプロジェクトを読み込む
- SQLite3を利用して保存したプロジェクト一覧を取得する
- ランダムでプロジェクトを選択し、テーブルに登録されていない要素がくればそれを対象とする
- 選択されたプロジェクトはテーブルに追加される
このツールを実行すると、画面に今回選択されたプロジェクトが表示されます(もし全てのプロジェクトが利用されたらNo project remains
と表示されます。)
試しに実行してみると以下のような結果となりました。
❯ uv run main.py
selected_item='Apache Commons Numbers'
このツールの使い方
このツールを使う場合は先ほども書いたように
れはネタが思い浮かばなかったり、思い浮かんでるけどなんか違うものがいいなと思った時に実行するようにします。
な時になります。なお、Apache AirflowやApache Beamなどは別途すでに利用しているので表示された時は対象外とします。また、この仕組みを利用して記事を書く場合はこの記事へのリンクを貼ろうと思います。
まとめ
今回は、Apacheプロジェクトからブログネタを探すという強行手段に出た私のツール作成について紹介させていただきました。おそらく今後Apacheプロジェクトについて記事が増える可能性がありますが、その際はこのツール使ったんだなと思ってもらえればと思います。
また、将来的にはCNCFだったりGoogle Cloud、AWSだったりありとあらゆるものを対象とする野望を立てておりますので、応援してもらえると嬉しいです。
Discussion