<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Projects on Rindrics Mumbles</title>
    <link>https://rindrics.com/projects/</link>
    <description>Projects</description>    
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Jan 2026 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://rindrics.com/projects/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>義元左文字</title>
      <link>https://rindrics.com/projects/yoshimoto-samonji/</link>
      <pubDate>Thu, 04 Dec 2025 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/yoshimoto-samonji/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;frasyrを利用したStrangler Figアプローチで、資源評価事業全体のwebアプリケーション化を試みるプロジェクト。&lt;/p&gt;
&lt;h2 id=&#34;開発経緯&#34;&gt;開発経緯&lt;/h2&gt;
&lt;p&gt;本プロジェクトの前身となった&lt;a href=&#34;../projects/mikazuki-munechika/&#34;&gt;三日月宗近&lt;/a&gt;では、パラメータ最適化など、科学計算部のパフォーマンスが問題となった。
そこで、frasyrをモノリスアプリケーションとして動かしたうえで、その周囲に関心領域の分かれたマイクロサービスを追加していくアプローチを検証する。&lt;/p&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;進行中&lt;/code&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>村正</title>
      <link>https://rindrics.com/projects/muramasa/</link>
      <pubDate>Thu, 01 Jan 2026 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/muramasa/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;Excel/CSVのシートから、空行で区切られた複数の表を検出し、それぞれをタイトル行、ヘッダー行、データ行に分けて読み取るJavaSrcipt用ツール。&lt;/p&gt;
&lt;p&gt;印刷物の表のようなレイアウトでデータが配置されたシートでは、1枚に複数の表が並び、表の上にタイトルが書かれていることが多い（いわゆる&lt;a href=&#34;https://cir.nii.ac.jp/crid/1050855522055934976&#34;&gt;ネ申エクセル&lt;/a&gt;）。
村正は次のルールで、こうしたシートを機械が扱える矩形のデータとして読み込む:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;空行で区切られた行のまとまりを、表の候補（ブロック）とみなす&lt;/li&gt;
&lt;li&gt;ブロックの先頭行が、ブロック内の最大列数より少なければタイトル行とみなす&lt;/li&gt;
&lt;li&gt;タイトルの次の行をヘッダー行とみなす。正規表現でヘッダー行を指定することも、ヘッダーなしと指定することもできる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;開発経緯&#34;&gt;開発経緯&lt;/h2&gt;
&lt;p&gt;資源評価事業をドメインモデリングに基づいてアプリケーション化する&lt;a href=&#34;./mikazuki-munechika&#34;&gt;三日月宗近&lt;/a&gt;プロジェクトで、査読者用のデータアップロード機能が必要だった。
このような外部との連絡部分では、自アプリのモデルを外部のデータ型式から守るためのいわゆる「腐敗防止層」が必要となる。
腐敗防止層のうち、Excelファイルからデータを取り出す部分を、汎用パッケージとして切り出した。&lt;/p&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;npmで公開中（&amp;ldquo;muramasa&amp;rdquo; ではまずいのでさすがにまともな名前をつけた）: &lt;a href=&#34;https://www.npmjs.com/package/@rindrics/tblparse&#34;&gt;&lt;code&gt;@rindrics/tblparse&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基本的にはnpmパッケージだが、GUIから使えるデモサイトを下記でホストしている:&lt;/p&gt;








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://tblparse.rindrics.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;tblparse Demo | tblparse.rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://tblparse.rindrics.com/&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

</description>
    </item>
    
    <item>
      <title>recurring-backlog-item-creator</title>
      <link>https://rindrics.com/projects/recurring-backlog-item-creator/</link>
      <pubDate>Sun, 09 Nov 2025 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/recurring-backlog-item-creator/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;設定ファイルに基づいて、GitHub Projectsのバックログアイテム（issue）を定期的に自動作成するGitHub Actions。
作成周期（毎月、四半期、年1回など）の異なる定期issueは、種類ごとにGitHub Action workflowが必要なため嵩張る。
これを設定ファイル一つで管理できるようにした。&lt;/p&gt;
&lt;p&gt;設定できる項目:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;issueごとの作成月&lt;/li&gt;
&lt;li&gt;タイトルの接頭辞・接尾辞（&lt;code&gt;{{YearMonth}}&lt;/code&gt; などのテンプレート変数を使える）&lt;/li&gt;
&lt;li&gt;Projectのカスタムフィールド&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;目的&#34;&gt;目的&lt;/h2&gt;
&lt;p&gt;振る舞いをコードではなく、データとしての設定ファイルで表現する感覚をつかむこと。&lt;/p&gt;
&lt;p&gt;設定をデータとして扱うと、「今月どのissueを作るか」は、設定と月からissueの一覧を求める変換として書ける。
そこで、CLIとActionとに分けて設計した:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CLI: 設定ファイルと月を受け取り、作るべきissueをJSONで返す
&lt;ul&gt;
&lt;li&gt;Goを使うことで楽に書けた&lt;/li&gt;
&lt;li&gt;副作用のない関数を中心に実装した。フィールドの検証やIDの解決でGitHubを読む部分はインターフェースで抽象化し、テスト時にモックに差し替え可能にした&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Action: GitHubへの外部副作用（issueの作成、Projectへの追加、フィールドの設定）を担当&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;GitHub Marketplaceで公開中: &lt;a href=&#34;https://github.com/marketplace/actions/recurring-backlog-item-creator&#34;&gt;&lt;code&gt;rindrics/recurring-backlog-item-creator&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ppap-cli</title>
      <link>https://rindrics.com/projects/ppap-cli/</link>
      <pubDate>Sat, 01 Jun 2024 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/ppap-cli/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;PPAP（Password付きZIPファイルを送ります / Passwordを送ります / Angoka Protocol）を使った添付ファイル送信を助けるCLI。&lt;/p&gt;
&lt;h2 id=&#34;目的&#34;&gt;目的&lt;/h2&gt;
&lt;p&gt;ブラックジョークのソフトウェア表現の模索。&lt;/p&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;リポジトリで公開している。&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>数珠丸</title>
      <link>https://rindrics.com/projects/juzumaru/</link>
      <pubDate>Mon, 01 Jan 2024 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/juzumaru/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;独自ドメインのメールをSlackをクライアントとして送受信するツール。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;受信: SESで受けたメールをS3に保存し、Lambdaで解析してSlackに投稿する。本文がSlack Block Kitの文字数制限を超える場合は、ファイルとしてスレッドに添付する&lt;/li&gt;
&lt;li&gt;送信: botにテンプレートを出させ、記入して投稿したメッセージのURLをbotに渡すと、プレビューが表示される。確認して送信ボタンを押すとSESから送る。同じメッセージからの二重送信は防いでいる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;目的&#34;&gt;目的&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;独自ドメインのメール送受信環境を作ること
&lt;ul&gt;
&lt;li&gt;商用サービスほどの可用性は必要ないので作ってみた。&lt;/li&gt;
&lt;li&gt;常時稼働のサーバーがないので運用コストが低い。受信したメールはまずS3に保存するので、Slackへの投稿に失敗してもメール自体は失われない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「インフラがインターフェイスを実装する」という考え方が、クラスレベルだけでなくパッケージやデプロイレベルでも成り立つことを実感すること
&lt;ul&gt;
&lt;li&gt;メールの解析や送信の判断はcoreパッケージにまとめ、ストレージやメールサーバーとのやり取りはリポジトリのインターフェースとして抽象化したので、一応クラウドプロバイダの種類にも依存しない設計になっている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;coreパッケージはnpmで公開中（さすがにまともな名前をつけた）: &lt;a href=&#34;https://www.npmjs.com/package/@rindrics/slackmail&#34;&gt;&lt;code&gt;@rindrics/slackmail&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;独自ドメイン宛てのメールは、すべて本ツールで受信している。&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>三日月宗近</title>
      <link>https://rindrics.com/projects/mikazuki-munechika/</link>
      <pubDate>Wed, 01 Jan 2025 00:00:00 +0900</pubDate>
      
      <guid>https://rindrics.com/projects/mikazuki-munechika/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;
&lt;p&gt;資源評価のプロセス全体をwebアプリケーション化する試み。
計算部だけでなく、業務プロセスの進行: 評価ステータスの遷移などもドメインモデリングされている
。&lt;/p&gt;
&lt;p&gt;デモとドキュメントは下記から利用できる:&lt;/p&gt;








&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://mikazuki-munechika.rindrics.com&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;資源評価Web | mikazuki-munechika.rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://mikazuki-munechika.rindrics.com&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;









&lt;div class=&#34;card&#34;&gt;
  &lt;a href=&#34;https://docs.mikazuki-munechika.rindrics.com&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; class=&#34;card-link&#34;&gt;
    &lt;div class=&#34;card-content&#34;&gt;
      &lt;h4 class=&#34;card-title&#34;&gt;資源評価Web 📖 | docs.mikazuki-munechika.rindrics.com&lt;/h4&gt;
      
      &lt;span class=&#34;card-url&#34;&gt;https://docs.mikazuki-munechika.rindrics.com&lt;/span&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&#34;開発経緯&#34;&gt;開発経緯&lt;/h2&gt;
&lt;p&gt;下記はプロジェクト開始時のモチベーション文:&lt;/p&gt;
&lt;div class=&#34;info&#34;&gt;
&lt;p&gt;資源評価事業をwebアプリケーション化する実験をしている。
資源計算だけでなく、計算・執筆・提案・議論・合意形成の流れからなる資源評価「事業」全体の話だ。&lt;/p&gt;
&lt;p&gt;この事業の難しさは、科学的・政治的要求にもとづく課題を解決する数値計算方法を開発するところにあるのはもちろんだが、そもそもコミュニケーションの難しさのほうがより重要なのではないか: 立場や知識背景がまったく異なるステークホルダーが、資源評価という関心領域（ドメイン）の下に集まって、漁獲可能量という一つの数値について議論し・意思決定しないといけない。&lt;/p&gt;
&lt;p&gt;ソフトウェア設計者たちは、これと同じ問題が（広義の）ビジネスがある場所には必ず潜んでいることに気づいており、その解決のために「&lt;a href=&#34;https://books.google.co.jp/books/about/Domain_Driven_Design.html?id=hHBf4YxMnWMC&amp;amp;redir_esc=y&#34;&gt;ドメイン駆動設計（Domain-Driven Development. DDD）&lt;/a&gt;」を2000年代前半に確立した。ドメイン駆動設計では、開発過程における思考資源の投資先を、プログラミングのような技術的詳細ではなく、ビジネスの営みを抽出した「ドメインモデル」をつくることに集中する。ドメインモデルは一度作って終わりではなく、ステークホルダー間で認識の齟齬が見つかるたびに、その新たな知識はモデルに反映される。このようにして磨き上げたドメインモデルを中心としてアプリケーションを開発するこの手法は、資源評価事業においてもヒントになると考えている。&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&#34;現在の状態&#34;&gt;現在の状態&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;開発停止（検証完了）&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;資源評価プロセスを型で表現し、コード補完などやコンパイル時チェックで開発を支援できることを確かめられた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mikazuki-munechika.rindrics.com/reference/maiwashi_pacific&#34;&gt;計算のフローチャート&lt;/a&gt;を実際のコードから生成できることがわかった&lt;/li&gt;
&lt;li&gt;日本語を使うことで、細かいニュアンスの違いも吟味しながらドメインモデリングできることがわかった
&lt;ul&gt;
&lt;li&gt;参考: &lt;a href=&#34;../stock-assess-code-with-japanese/&#34;&gt;ドメインモデリングに日本語を使う&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;検証の過程でわかったこと&#34;&gt;検証の過程でわかったこと&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Node.jsではパラメータ最適化部分で速度が出ず、科学計算に適した言語を呼び出す必要がある
&lt;ul&gt;
&lt;li&gt;frasyrを入れたRを呼び出すのが自然
&lt;ul&gt;
&lt;li&gt;frasyrモノリスを使ったStrangler Figアプローチの後継プロジェクト&lt;a href=&#34;../yoshimoto-samonji&#34;&gt;義元左文字&lt;/a&gt;で検証する&lt;/li&gt;
&lt;li&gt;三日月宗近と義元左文字は背反ではなく、必要であれば両者をつなぐこともできる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ドキュメントとしてエクスポートする型は、ドメインエキスパートに見せるものに絞るのがよさそう
&lt;ul&gt;
&lt;li&gt;あまり考えず生成したら&lt;a href=&#34;https://docs.mikazuki-munechika.rindrics.com/references/&#34;&gt;こうなった&lt;/a&gt;が、これを見たドメインエキスパートを圧倒してしまうと思う&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;評価のステータスを型で表すこと自体はいいが、状態をオブジェクトに持たせる旨味はなかった
&lt;ul&gt;
&lt;li&gt;ユースケースを考慮しても、状態はイベントから導出するほうがよいだろう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
