はじめに
XBRLって聞いたことはあるけど、文法が複雑そうで触りたくない——そんな開発者、意外と多いのではないでしょうか。でもSQLならわかる。RDBなら扱える。そんな人に向けて、CLIツール『xbrlplus』を作りました。
xbrlplus は、XBRLファイルを読み込んでSQLite形式のDBに変換してくれるツールです。NuGetから dotnet tool としてインストールできるので、導入も簡単。XBRLの文法を知らなくても、SQLで中身を覗ける安心感があります。もちろん、アンインストールもコマンド一発でできるので合わなければサクッと捨ててください。
この記事では、「XBRLは避けたいけど、データは扱いたい」そんな開発者に向けて、xbrlplus の使い方と構造の魅力を紹介します。
インストール方法
xbrlplus は NuGet から dotnet tool としてインストールできます。開発環境に .NET SDK が入っていれば、以下のコマンドでグローバルに導入できます:
dotnet tool install --global xbrlplus
アンインストール方法
もし使ってみて「ちょっと違うな」と感じたら、以下のコマンドで簡単に削除できます:
dotnet tool uninstall --global xbrlplus
環境を汚さず、気軽に試せるのも xbrlplus の魅力のひとつです。
使い方の概要
xbrlplus は、XBRLインスタンス(.xbrl)やスキーマファイル(.xsd)を入力として受け取り、SQLite形式のリレーショナルデータベースに変換します。コマンドを実行すると、REPL(対話型SQLコンソール)が起動し、SQLで中身を直接確認できます。
以下は、スキーマファイル(2026年版EDINETタクソノミのエントリーポイントファイル)を指定して起動した例です:
F:\temp\2026\samples\2025-11-01>xbrlplus entryPoint_jpcrp020000-srs_2025-11-01.xsd
SQLite REPL is ready. Type SQL statements and end with ';' to execute. Type '.exit' to quit.
SQL> select * from VLabels limit 10;
出力例(先頭10件):
LabelId NamespaceName LocalName Lang Text Role
------- ------------- --------- ---- ---- ----
1 ... ... ja 開示府令 第二号様式 有価証券届出書 ...
2 ... ... ja 企業内容等の開示に関する内閣府令 第二号様式 有価証券届出書 [目次項目] ...
3 ... ... en Disclosure of Corporate Information Form No. 2 Securities Registration Statement ...
...
10 ... ... ja 企業内容等の開示に関する内閣府令 第二号の三様式 有価証券届出書 [目次項目] ...
REPLを終了するには .exit(または .quit, .q)を入力します。
SQL> .q
テーブル構造(リンク)
xbrlplus が生成するSQLiteのテーブル構造は、GitHubのREADMEで公開しています。
各テーブルの役割やカラム構成が明記されているので、SQLで扱う際の参考にしてください。
出力形式の柔軟性
xbrlplus のREPLでは、出力先と出力形式を柔軟に切り替えることができます。標準出力(コンソール)だけでなく、ファイルへの出力も可能です。
出力先の切り替え: .output コマンド
デフォルトではコンソールに出力されますが、.output <ファイル名> を使えばファイルに書き出すことができます。
SQL> .output
Output redirected to console.
SQL> .output sample.txt
Output will be written to 'sample.txt'.
SQL> select * from VLabels limit 10;
Output written to 'sample.txt'.
SQL> .output
Output redirected to console.
出力フォーマットの切り替え: .format コマンド
出力形式は table(表形式), csv, json の3種類から選べます。デフォルトは table です
SQL> .format
Current format: table
Usage: .format [table|csv|json]
SQL> .format csv
Output format set to 'csv'.
SQL> .format
Current format: csv
SQL> .format json
Output format set to 'json'.
ユースケース
XBRLインスタンスから特定の概念(要素)の値をまとめて取り出す場合
ここでは、2025年版EDINETタクソノミとともに公開されているサンプルインスタンスを使って、【主要な経営指標等の推移】から売上高の情報を抽出するケースを紹介します。
この売上高は、 NetSalesSummaryOfBusinessResults というタグで記述されていることがわかっているものとします(※タクソノミ要素リストから確認できます)。
この場合は、ビュー VFacts に対して LocalName を指定することで、該当データを抽出できます:
F:\temp\2025\ダウンロードデータ\02_開示府令-有価証券報告書\S002XXXX\XBRL\PublicDoc>xbrlplus jpcrp030000-asr-001_X99001-000_2025-03-31_01_2025-06-28.xbrl
SQLite REPL is ready. Type SQL statements and end with ';' to execute. Type '.exit' to quit.
SQL> select Nil, Decimals, Value, ContextName, StartDate, EndDate from VFacts where LocalName = 'NetSalesSummaryOfBusinessResults';
出力例:
Nil Decimals Value ContextName StartDate EndDate
--- -------- ----- ----------- --------- -------
0 -6 231282000000 Prior4YearDuration 2020-04-01 2021-03-31
0 -6 273802000000 Prior3YearDuration 2021-04-01 2022-03-31
0 -6 303080000000 Prior2YearDuration 2022-04-01 2023-03-31
0 -6 316934000000 Prior1YearDuration 2023-04-01 2024-03-31
0 -6 323609000000 CurrentYearDuration 2024-04-01 2025-03-31
0 -6 130747000000 Prior4YearDuration_NonConsolidatedMember 2020-04-01 2021-03-31
0 -6 154886000000 Prior3YearDuration_NonConsolidatedMember 2021-04-01 2022-03-31
0 -6 183448000000 Prior2YearDuration_NonConsolidatedMember 2022-04-01 2023-03-31
0 -6 196499000000 Prior1YearDuration_NonConsolidatedMember 2023-04-01 2024-03-31
0 -6 210346000000 CurrentYearDuration_NonConsolidatedMember 2024-04-01 2025-03-31
10 row(s) selected.
表示リンクの構成を確認する
同じデータを使って、今度は表示リンク(表示上の項目の並び)がどのように定義されているかを見てみます。
まず、どんな表示リンクのツリーが存在するかを確認するには、ビュー VPresentationLinkNodes からロール定義(Definition)を一覧で取り出します
SQL> select distinct Definition from VPresentationLinkNodes order by Definition;
Definition
----------
010300 開示府令 第三号様式 有価証券報告書
020000 表紙
210000 連結経営指標等
211000 提出会社の経営指標等
212000a 従業員の状況
...
410010i セグメント情報等、連結財務諸表(負ののれん発生益)
55 row(s) selected.
このなかから、たとえば020000 表紙の項目構成を確認したい場合は、以下のように Definition を指定して並び順(Seq)で取得します:
SQL> select LinkNodeId, ParentId, Depth, ArcOrder, PreferredLabel, LocalName
> from VPresentationLinkNodes where Definition = '020000 表紙'
> order by Seq;
出力例:
LinkNodeId ParentId Depth ArcOrder PreferredLabel LocalName
---------- -------- ----- -------- -------------- ---------
238 0 CoverPageHeading
239 238 1 1 DocumentTitleCoverPage
240 238 1 2 ClauseOfStipulationCoverPage
...
253 238 1 15 PlaceForPublicInspectionCoverPageTextBlock
16 row(s) selected.
この結果から、CoverPageHeading がルートノード(最上位)であり、その下に DocumentTitleCoverPage から PlaceForPublicInspectionCoverPageTextBlock までの項目が並列に並んでいることがわかります。
おわりに
今後は、リモートファイルのキャッシュやプロキシ対応、TDnetのようにXBRLインスタンスが存在しない(inlineXBRLのみの)データへの対応など、機能拡張も検討しています。
ツールの詳細やテーブル構造については、以下のリンクをご覧ください:
テーブル構造の改善にも取り組んでいきたいので、利用者のご意見は大歓迎です。
気になる点や要望があれば、GitHubの issue に書いていただけるととても嬉しいです。