世界を動かす技術を、日本語で。

Jiraはチューリング完全である

2026年5月25日原文(seriot.ch)

概要

  • Jiraのオートメーション機能チューリング完全性 を持つことを証明
  • Minskyマシン (2レジスタ計算機)を Jira上で実装 する方法を解説
  • 課題リンク数・Epicのステータス で計算状態を表現
  • 加算・フィボナッチ計算例 で動作を実演
  • Jiraの実用的な複雑性 がプログラムと同等であることを示唆

Jiraはチューリング完全:MinskyマシンをAtlassian Automationで構築

  • Jira(Atlassianのプロジェクト管理ツール)チューリング完全 であるというエンジニアリングの通説
  • これまでは曖昧な主張が多かったが、本記事では 厳密な証明具体的な手順 を提示

Minskyマシンの計算モデル

  • Minskyレジスタマシン2つの無限カウンタ有限の命令集合 で構成
    • INC r; goto S (レジスタrをインクリメントし状態Sへ遷移)
    • DEC r; if r==0 goto S else goto S' (レジスタrをデクリメントし条件分岐)
  • 加算プログラム例
    1. DEC A; if A==0 goto 3 else goto 2
    2. INC B; goto 1
    3. HALT
  • Minsky(1967年)がこのモデルの チューリング完全性 を証明

Jiraへのモデル写像

  • レジスタA :Epicにリンクされた Bug課題の数
  • レジスタB :Epicにリンクされた Task課題の数
  • プログラムカウンタ :Epic課題の ステータス
  • ディスパッチテーブル :各状態ごとの Jira Automationルール
  • クロック :自動化による遷移、または手動トリガー
  • INC/DEC :課題の 作成/削除 で実現
  • 条件分岐JQL条件付きルール で実装

加算マシンの実装手順

  • 1. ワークフロー作成

    • ステータス: BACKLOG, TODO, DEV, PROD
    • どの状態からも他の状態へ遷移可能
    • Epic課題 をBACKLOGステータスで作成
  • 2. TODOルール(DEC A; if A=0 halt, else goto DEV)

    • トリガー:EpicのステータスがTODOに変更
    • Bug課題が1つ以上:Bugを1つ削除しEpicをDEVへ
    • それ以外:EpicをPRODへ(HALT)
  • 3. DEVルール(INC B; goto TODO)

    • トリガー:EpicのステータスがDEVに変更
    • 新規Task課題を作成しEpicにリンク、EpicをTODOへ遷移
  • 4. レジスタ初期化

    • Epicに Bug 2件(A=2)、Task 3件(B=3) をリンク
  • 5. マシン起動

    • EpicをTODOに遷移し、遷移チェーンが開始
    • 遷移例:(2,3)TODO →(1,3)DEV →(1,4)TODO →(0,4)DEV →(0,5)TODO →(0,5)PROD
    • 結果:EpicはPROD、Bug 0件、Task 5件(2+3=5の加算結果)

フィボナッチ計算の簡素化

  • Jira Automation の「課題タイプ変換(CONVERT)」で Minsky操作を簡略化
    • Bug→Story、Story→Taskなど即時変換
    • CONVERT=DEC+INC に相当し、分岐表を大幅に縮小
  • フィボナッチ計算例 (A=Bug, B=Task, C=Story)
    • ステータス: TODO, QA, DEV の3状態
    • TODO:TaskがあればTask→Story変換、BugをINC、TODOへ
    • QA:BugがあればBug→Task変換、QAへ
    • DEV:StoryがあればStory→Bug変換、DEVへ
    • 初期状態:A=1, B=1, C=0
    • Bの数として フィボナッチ数列 (1,1,2,3,5,8,13, …)が現れる
    • HALT状態なし、Jira Cloudのチェーン上限10で停止、手動で再トリガー可能

結論

  • Jiraのオートメーション言語2カウンタマシン をエンコード可能
  • Jira Cloudの物理的制限 はあるが、 チューリング完全性の証明 には影響しない
  • Jiraの複雑な自動化本質的にプログラム である理由の説明

Hackerたちの意見

すべてのワークフローとオーケストレーションエンジンはチューリング完全なんだよね。要するに、実行フローを自動化するためのものだから。

その中で無限に動き続けられるのはどれくらいあるの?人間が再トリガーして、途中から続けられるやつとか。

そうは思わないな。まず、JIRAはオーケストレーションじゃないし。次に、ワークフローがやるべきことは、外部情報とステータスを関連付けて、それを簡単に操作できるようにすることだよ。トリガーやルールが必要で、無限カウンターとか、2つのスタック、双方向テープみたいなものが必要だね。俺が間違ってるって証明してみてよ!

Jiraは本当に最悪で、他のどんな最悪なものにも挑戦できるポテンシャルがあるよね。

それとも、アホみたいに完全なのかな? :)

Jiraは疎外の概念の究極の例だね。マルクスがアトラシアンについて知ってたら、『グンドリッセ』はめちゃくちゃ面白くなってたはず。

一番最悪なのは、タスク管理製品を持ってる会社がみんなJiraに向かってること。2014年のGitHubのイシューと今のを比べてみてよ:https://github.com/features/issues それに、無駄な機能をどんどん追加してるし。

だから、どのJiraの操作が停止するかどうかを判断するのが不可能なんだね。

これ、過小評価されてるコメントだね!

それって「JiraでDoomができる」ってことになるの?Jiraはその結果出てくる悪魔を倒すためのポンプアクションショットガンを提供してくれるの?

以前に彼らの自動化フローを深く使ったことがあるなら、驚くことじゃないよね。驚くべきは、彼らの自動化フローツールがどれだけ使いにくいかってこと。やりたいことを達成するためにアセンブリ言語でプログラミングしてる気分になるよ。

Jiraは人気があって、好きな言語のための良いAPIラッパーがあるよね。企業のプログラマーたちがハッカー精神を持ってるのに、PythonのコマンドラインスクリプトとかでJiraでやるべきことを自動化してないのが意外だよ。自分にとってJiraを使いやすくすれば、押し付けられてる人たちよりも圧倒的に楽になる。そうなると、逆にJiraが自分を守るための道具になるんだよね。時には悪意を持ってJiraを使ったこともあるけど、あれは本当に役立つツールだよ。もし何か問題が起きたら、「これ、俺が書いた何百ものJiraの更新で全部明確にしてるから、読んでるよね?」って指摘すればいい。どうするつもりなんだろう?Jiraを使うなって言うの?今はAIがあるから、カスタムスクリプトで全部つなげてAIにJiraの面倒を見させちゃえばいいんだよ。

Hacker Newsで議論の続きを見る