2 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • Jira Automation は、2つの無限カウンタと有限の命令状態を持つ Minsky マシンを表現でき、Jira のチューリング完全性を示せる
  • Epic の状態は プログラムカウンタ、リンクされた Bug と Task の数は2つのレジスタとなり、Automation ルールが命令ごとのディスパッチテーブルになる
  • INCDEC はリンクされた課題の作成・削除で実装され、条件分岐は JQL 条件ルール でリンク課題数を調べて決定される
  • 加算の例では A=2B=3 から Bug を減らし Task を増やし、実際の *.atlassian.net 実行で Task 5個 と停止状態に到達する
  • Fibonacci の例では課題タイプ変換でループを減らし、Jira Cloud の チェーン深度制限 10 に達したら手動再トリガーで継続できる

Jira 自動化で作る Minsky マシン

  • Jira Automation は、2つの無限カウンタと有限の命令状態を持つ Minsky register machine を表現できるため、Jira のチューリング完全性を示す還元が可能
  • Minsky が1967年に証明したモデルは、INC r; goto Sif r == 0 goto S else (DEC r; goto S') だけで構成される
  • Jira の構成要素は Minsky マシンの各要素に対応する
    • Register A: リンクされた Bug 課題の数
    • Register B: リンクされた Task 課題の数
    • Program Counter: 単一の Epic 課題の状態
    • Dispatch Table: 命令状態ごとの Jira Automation ルール
    • Clock: 自動化がトリガーする遷移、またはチェーン制限後の外部再トリガー
  • Epic の状態が現在の命令をエンコードし、Automation rules がリンク課題数を確認して次の状態へ遷移する
  • INCDEC は該当タイプのリンク課題の作成と削除で実装され、条件分岐は JQL 条件ルール で処理される

実行例と制限

  • 加算プログラム は、A を減らしながら B を増やす Minsky プログラムで構成される
    1. if A == 0 goto 3 else (DEC A; goto 2)
    2. INC B; goto 1
    3. HALT
    
  • 最小実装は、1つの Epic、リンク課題5個、命令状態ごとに1つずつの Automation ルールで構成される
  • ワークフローとルール

    • Jira Workflow に初期状態 BACKLOG、続いて TODODEVPROD を作成し、すべての状態間で相互に遷移できるよう設定する
    • BACKLOG 状態の Epic を1つ作成する
    • TODO ルールは DEC A; if A=0 halt, else goto DEV を実装する
      • Epic の状態が TODO に変わるとトリガーされる
      • リンクされた Bug が1つ以上あれば Bug を1つ削除し、Epic を DEV に遷移させる
      • Bug がなければ Epic を PROD に遷移させて停止する
    • DEV ルールは INC B; goto TODO を実装する
      • Epic の状態が DEV に変わるとトリガーされる
      • 新しい Task を作成して Epic にリンクする
      • Epic を TODO に遷移させる
    • どちらのルールでも "Allow rule to trigger other rules" を有効にする
  • 初期値と結果

    • Epic に Bug 2個と Task 3個をリンクして A=2B=3 として初期化する
    • Epic を TODO に遷移させると、次の流れで連鎖実行される
      (2,3) TODO →
      (1,3) DEV  →
      (1,4) TODO →
      (0,4) DEV  →
      (0,5) TODO →
      (0,5) PROD
      
    • 実際の *.atlassian.net インスタンスで実行され、最終的に Epic は PROD に到達し、Bug 0個と Task 5個がリンクされる
    • この実行は Jira 自動化で 2 + 3 = 5 を計算した結果になる
  • Fibonacci 構成

    • Convert Issue Type は、Bug → Story、Story → Task のように課題タイプを即座に変更できる
    • CONVERTDEC + INC で表現でき、計算能力自体を拡張はしないが、移動ループのディスパッチテーブルを減らして、より複雑なプログラムを扱いやすくする
    • Fibonacci は (A, B) → (B, A+B) として表現され、3つのレジスタ A=BugB=TaskC=Story と3つの状態 TODOQADEV で構成される
      TODO:
          if any linked Task exists:
              CONVERT Task → Story
              INC Bug
              transition to TODO
          else:
              transition to QA
      
      QA:
          if any linked Bug exists:
              CONVERT Bug → Task
              transition to QA
          else:
              transition to DEV
      
      DEV:
          if any linked Story exists:
              CONVERT Story → Bug
              transition to DEV
          else:
              transition to TODO
      
    • 初期状態は A=1B=1C=0 で、Task の数である B1, 1, 2, 3, 5, 8, 13, ... の数列が現れる
    • 加算マシンと異なり、Fibonacci マシンには停止状態がなく、Jira Cloud のチェーン深度制限 10 に達するまで実行される
    • 制限に達したら、運用者が Epic を再トリガーして継続でき、1回の状態編集で連鎖実行を再開できる
    • Jira Data Center は automation.rule.execution.timeout と関連設定を構成可能なプロパティとして公開している
    • 無限の課題生成とルール実行を仮定すれば、Jira 自動化言語は2カウンタマシンをエンコードでき、物理コンピュータも有限であるという通常の基準では、Jira Cloud の有限クォータはこの構成への反証にならない

1件のコメント

 
GN⁺ 3 시간 전
Hacker Newsの意見
  • Jiraは完全にひどいので、別のどんな形のひどさにも変化しうる潜在力を持っている

    • Jiraは疎外という概念の究極の事例だ
      MarxがAtlassianを知っていたら、Grundrisseはものすごく燃え上がっていただろう
    • 最悪なのは、タスク管理製品を作る会社が結局みんなJira寄りになっていくことだ
      2014年のGitHub Issuesと今の姿を見比べればいい: https://github.com/features/issues
      しかも延々と、延々と、重複機能を追加し続けている
  • Jiraは人気があり、好みの言語向けのAPIラッパーもよく揃っている
    ハッカー気質のある企業開発者たちが、PythonのコマンドラインスクリプトのようなものでJiraにやらされる作業の大半を自動化していないのが不思議なくらいだ
    Jiraを押し付ける人たちより自分のほうが一桁以上楽に使えるようにしてしまえば力関係がひっくり返り、Jiraは自分を守るために押し付ける道具になる
    ときどきほとんど悪意を持ってJiraを使ってみたが、責任回避には素晴らしい
    問題が起きたら「これは私が書いた何百件ものJira更新に全部明確に書いてありましたよね、読んでいましたよね?」と言えばいい
    今はAIもあるのだから、カスタムスクリプトで全部まとめてAIにJiraの雑務をやらせればいい

    • かなり多くの人がすでにそうしているが、問題はJiraのインスタンスごとに、古い失敗したマイグレーションと新しい組織戦略が何層にも積み重なったカスタム属性のフラクタル雪片になっていることだ
      APIでできることがUIでは許可されていない場合も多く、しかもみんなUI基準で動くので、変に壊れた隅へ迷い込みやすい
      たとえばcustom_field_5537がcustom_field_442と対になっていないと他人のダッシュボードに表示されない、ということに気づかないかもしれない
      またcustom_field_10995は整数フィールドだと主張し、XMLでも整数として返すのに、チケット作成時には文書化されていない魔法の定数文字列を使わなければならず、更新時にはそうでもない、という具合だ
      Web UIはそうしておらず、HTMLとリクエストにはただの整数が入っていて、その文字列の80%だけがドロップダウンの表示テキストと一致する
      Jira自動化は私が経験した最悪のプログラミング体験だった
      もっと単純な設定が存在し、かなり簡単な場合もあるのは確かだが、それでもひどすぎる
      悲しいことに、それでも注いだ労力に完全に見合う。強く勧める
    • 以前働いていた会社では、APIで時間を節約するツールをいくつも作っていて、全部小さなシェルスクリプトだった
      各チケットに人が読める説明用のカスタムテキストフィールドを追加し、リリースがデプロイされるとデプロイスクリプトがタイムスタンプを自動で埋めていた
      私たちは作業単位ごとにチケットを1件ずつリリースし、1日に何件も処理していた
      カスタムフィルターと組み合わせることで、Jiraは各ボードと会社全体について人が読める変更ログを提供し、これらのメッセージがSlackでビジネス側に送られて、何がデプロイされたのかを全員が把握できた
      それはコード変更に結びつく検索可能なリリース監査ログでもあった
      デプロイ処理がJiraチケットの状態も遷移させるので、開発者はチケットをmainにマージするだけで、デプロイされ、Jiraでも完了になった
      定型作業用のチケットを自動生成する小さなスクリプトもたくさんあった
      何年も非常に堅牢で、今でも動いている可能性が高い
      カスタムフィールドの命名規則はいまひとつだったが、チームがJira設定を管理しているなら全員が同じ基準を保つのは難しくなかった
      最初はJiraが好きではなく、昔は問題も多かったが、最近は設定さえうまくやればそこまで悪くない
      自分の会社なら選ばないが、開発者でもあり管理者でもあり最終利用者でもあり社内ツール開発者でもあった立場からすると、構成されて動き始めればたいてい邪魔にはならない
    • 「カスタムスクリプトで全部まとめてAIにJiraの雑務をやらせろ」というのは、まるでJiraの肥大さがまだ十分でないかのようだ
      テキストをさらに追加すれば、Jiraはsomehowその大量のテキストの上で常にすべてを自動実行することになり、もっと遅くなるだろう
      会社に暖房が必要ならJiraを使えばいい
    • かなり昔にJetBrains YouTrackへ移行し、私たちはそのAPIでこうしたことをやっていた
      かなり柔軟で、AIのおかげでさらに可能性が広がった
    • 会社全体が実質的にJiraで回っている
      ほとんどのプロセスがJiraに依存しており、特定の遷移が自動化用のWebhookを実行する
      AIへのアクセス権を得て最初にやったことの一つがJira MCPを作ることだった
      今ではJiraをほとんど直接触らないようにしていて、ClaudeにJiraの課題作成、コメント記入、サブタスク作成、課題の関連付けなどをやらせている
      以前は実装方法を調べてタスクに分解しなければならないたびに怖かった
      細かく分けるほど、それぞれの作業を入れるJira課題をさらに多く作らなければならなかったからだ
      今では全部をファイルに整理して、大規模言語モデルにJiraの雑務を任せればいい
  • 以前働いていた会社に戻ったら、まだJIRAを使っていた。
    面接では当然「JIRAですか、まだそれ使ってるんですか? 使えますよ」と答えた。
    実際使えはするが、最新のJIRAを見て本当に衝撃を受けた。
    細かい不便が千個くらいあって、最悪の一つはテキストをダブルクリックして選択しようとすると、いきなりフィールドが編集モードに入ることだ。
    私が覚えているのは JIRA Server 4.0 で、ここで当時を振り返れる: https://www.jirastrategy.com/wp-content/uploads/2020/04/depl...
    十分に拡大すると、各イシューにはタイトル、種類、修正バージョン、影響バージョンなどがあり、そのままコメントへつながる構造になっていた。とてもシンプルだった。

    • ダブルクリックで編集モードに入る問題は本当にその通り。
      ものすごくイライラする。基本的なテキスト操作すらおかしい。
      なのに、それを気に入っているプロジェクトマネージャーがいると言っていた。
      単語全体を選ぶためのダブルクリックドラッグを使わないからだそうだ。
      いつものことだが、コンピュータをやっと使える程度の人たちの都合のせいで、より熟練したユーザーが引きずり下ろされる。
    • 「JIRAですか、まだそれ使ってるんですか?」という反応が妙に聞こえる。
      何か見落としているのか、時間の穴に落ちたのかと思う。
      なぜ Jira をVisicalcみたいに語るのかわからない。
      今はIT企業で働いていないので、この2年の間に何か大変動を見逃したのかもしれない。
    • 株価と、ユーザーの好意的な認識が製品に残っていた時期との相関は見つけられる。
      4.x から 6.x に移るときにも、あるいは OFBiz のガタガタした箱や、見た目だけ合わせたまったく別の製品群のように、細かな不便も一緒についてきた。
      そのエンジニアたちはとっくに去り、1株280ドルも一緒に持っていった。
    • もう本業で Jira や似たようなツールを使う必要がなくなったので純粋に気になるのだが、開発者だけでなくプロジェクトチーム全体の観点から、より良い代替案についての合意はあるのか?
    • そのバージョンの JIRA も、設定を間違えれば簡単にひどいものになり得た。
      JIRA の根本的な問題は、まともに設定する権限が常にごく少数にしかなく、その人たちが面倒くさがるか、時間がないか、毎日使わないので気にしないことにある。
      もちろん問題はそれだけではない。
      想像しがたいほど遅いし、イシューが別のイシューの親になれないといった妙な制限もある。
  • JIRA は遅すぎるし、管理者たちはまともな設定方法を知らないように見えた。
    使っただけでトラウマがある。

    • ツールのせいではないとも言える。
      この惑星には、そのツールを正しく設定できる人間が一人もいないだけだ。
      人間の無能を理由にツールに責任を負わせることはできないだろう。
      では誰のために作られたのか、というのはまったく別の問題で、今は議論しないほうがいい。
    • いつも引っかかるのは遅さだ。
      本質的にチケットシステムとは、チケットとチケットの関係や状態を保持するデータベース以上のものではない。
      もちろん、関連チケットやカスタムフィールド、プラグインが多ければ複雑さが爆発することはあり得る。
      それでも、単純なテキストデータと添付ファイルを扱う代物が、どうしてあれほど耐えがたいほど遅くなり得るのか理解できない。
  • ついに Jira でDoomができるようになった。

    • そう。Quake 3 Arena Multiplayerも可能だ。
  • https://mattrickard.com/accidentally-turing-complete

  • つまり、ある Jira のタスクが停止するかどうか判定できない理由が説明されている。

    • じゃあ「Jira で Doom ができる」に該当するのか?
      Jira は、その結果として生まれる悪魔どもを始末するためのポンプアクションショットガンも提供してくれるのか?
  • 代わりにAzure Boardsを使ってみれば、JIRA を好きになるはずだ。
    Microsoft がもっと悪くできないソフトウェアはこの世にないからだ。

    • Gmail は昔から嫌いで今でも嫌いだが、去年転職して新しい会社が Outlook を使っているので考えが変わった。
      Outlook に対する軽蔑をきちんと表せる言葉を見つけるのは難しく、「嫌い」では話が始まらない。
      メールを受け取って送るという最も基本的な作業すらまともにこなせない。
      スマホにメール通知が来てアプリを開いても何もなく、下に引っ張って更新しても何も起きない。
      たいてい 1〜15 分後になってやっと表示される。
      Outlook でやることは何もかもがひどく煩雑だ。
      昔、Office 2003 の時代にも Outlook を使っていたが、ここまでひどかった記憶はない。どうしてここまで退化したのかわからない。
      Teams については語り始めたくもない。あのプログラムが何の問題を解こうとしているのかもよくわからない。
      共有ファイルは OneDrive にあるのに Teams にもあり、なぜか Outlook にもある。
      コンピュータのバックアップファイル、CloneZilla イメージ約 30GB を OneDrive/Teams/Outlook に移さなければならなかったが、永遠にかかり、Win11 の入った 6 コア Ryzen ノートPCのファンがその間ずっと狂ったように回っていた。
      どうして? なぜ?
  • すべてのワークフローおよびオーケストレーションエンジンはチューリング完全だ。
    そもそもの目的が実行フローを自動化することだからだ。

    • そのうちどれだけが無限に実行できるのか?
      あるいは、人間が再トリガーして中断した地点から再開できるのか?
    • そうは思わない。
      第一に、JIRA はオーケストレーションではない。
      第二に、ワークフローの仕事とは、ある種の状態を外部情報に結びつけ、それらを簡単に操作できるようにすることだ。
      チューリング完全であるには、トリガーとルール、無限カウンタのようなもの、2つのスタック、双方向テープのようなものが必要だ。
      違うというなら証明してみてくれ。
  • Jira の自動化は気に入っている。
    Jira を使う新しいチームに入ると、サブタスクのストーリーポイントを自動集計して親タスクのストーリーポイントを埋めたり、十分に精緻化された属性がなければチケットを自動でバックログに戻したりする自動化を設定する。
    たとえば担当者、ストーリーポイント、優先度、説明などが欠けている場合だ。
    1スプリントも過ぎればチームボードはずっと整理される。
    なぜこれがデフォルトでないのかはわからないが、自動化で簡単に直せる。

    • チケットが精緻化されたと見なすのに、なぜ担当者の割り当てが必要なんだ?
      担当者はその作業を引き受けた人に割り当てられればいいのであって、精緻化段階の一部であるべきではない。