はじめに
Qiita を普段使っていて、こんなことを思ったことはありませんか?
- 「自分の記事の いいね数・PV をまとめて確認したい」
- 「あのタグの記事をまとめて読み比べたい」
- 「記事に誰がいいね・ストックしてくれたか一覧で見たい」
- 「気になる記事をローカルにバックアップしたい」
Web ブラウザでは 1 記事ずつ開いて確認するしかありませんが、QiitaDrive を使えば、PowerShell のコマンドで Qiita の Web 記事をファイルのように操作できます。
QiitaDrive とは
QiitaDrive は PowerShell プロバイダ として実装されたモジュールです。Qiita: という仮想ドライブをマウントし、dir、cd、Get-Content といった標準コマンド(プロバイダコマンドレット)で Qiita API v2 を操作できます。
PS プロバイダは、任意のデータストアを PowerShell Drive にして、dir や cd などのコマンドで操作できるようにします。この実装方法は、Microsoft のドキュメント にあります。
主な特徴
| 特徴 | 説明 |
|---|---|
| 仮想ファイルシステム |
dir, cd, cat など普段使いのコマンドがそのまま使える |
| OAuth 認証 | ブラウザでログインするだけ。トークンの手動取得は不要 |
| Qiita Team 対応 |
-Team パラメータでチーム環境に接続 |
| ページング |
-Skip / -First で大量の記事を効率的にブラウズ |
| インメモリキャッシュ | 一度取得した記事はセッション中キャッシュ。-Force で再取得 |
| パイプライン連携 |
Sort-Object, Where-Object, Export-Csv など PowerShell の機能をフル活用 |
なお、このアプリは Qiita に 読み取り権限でアクセス します。記事を投稿したり、削除することはできません。
インストール
PowerShell 7.4 以降で動作します。
Install-PSResource QiitaDrive
セットアップ
Qiita に接続(OAuth 認証)
New-QiitaDrive
これだけで Qiita: ドライブがマウントされます。(Get-PSDrive コマンドを試して下さい。)この時点では認証は発生しません。実際に API を呼ぶ操作(dir Qiita:\Me\Items など)を行ったタイミングで、自動で PKCE フローが起動してブラウザが開きます。ログイン済みなら「許可する」ボタンを押すだけです。トークンはメモリ上のみに保持され、セッション終了で破棄されます。
PowerShell コンソールを起動するたびに New-QiitaDrive を実行するのが面倒なら、$PROFILE(PowerShell 起動時に自動で実行されるスクリプト)に New-QiitaDrive を追記しておきましょう。
# メモ帳で $PROFILE を開きます。New-QiitaDrive を追記してください
notepad $PROFILE
トークン指定
OAuth の代わりに、Qiita の設定画面で発行したアクセストークンを直接指定することもできます。これはブラウザのログイン画面を開かないので、無人のスクリプトでも実行できます。
New-QiitaDrive -Token $env:QIITA_TOKEN
トークンはパスワードと同様の機密情報です。他人に漏れないように管理して下さい。
Qiita Team
New-QiitaDrive -Team your-team
フォルダ構造
マウントされた Qiita: ドライブには、以下のフォルダがあります。
Qiita:\
├── CachedItems\ キャッシュ済みの全記事
├── ItemDetails\ 記事の詳細情報
│ └── <記事名>\
│ ├── Comments\ コメント (Get-Content 対応)
│ ├── Likes\ いいねしたユーザー
│ └── Stockers\ ストックしたユーザー
├── LatestItems\ Qiita 全体の新着記事
├── Me\ 自分のデータ
│ ├── Items\ 投稿した記事(PV 数付き)
│ ├── Stocks\ ストックした記事
│ ├── Followers\ フォロワー
│ ├── FollowingTags\ フォロー中のタグ
│ └── FollowingUsers\ フォロー中のユーザー
├── Search\ 検索結果
│ └── <query>\
├── Tags\ タグ別の記事
│ └── <tag>\
├── Team\ チーム管理(Team 接続時のみ)
└── Users\ ユーザー別の記事
└── <user_id>\
Qiita:\Me\Followers\ や Qiita:\ItemDetails\<記事名>\Likes\ に表示されたユーザーは、自動で Qiita:\Users\ に集約されます。このフォルダから、それらのユーザーの記事にもアクセスできます。
基本的な使い方
記事を一覧する
# ユーザー Qiita の記事を見る
dir Qiita:\Users\Qiita
# 検索
cd Qiita:\Search\Docker # "Docker" で検索するフォルダを作成
dir # "Docker" で記事を検索
# Qiita 全体の新着記事
dir Qiita:\LatestItems
# ページネーション
dir Qiita:\Tags\Python -First 50
dir Qiita:\Tags\Python -Skip 100 -First 20
dir のパラメータ -First を省略した場合、キャッシュ済みの記事があればそれを表示し、なければ API で 20 件取得します。-Skip / -First で任意の範囲を取得できます。API の制限により、1 回のリクエストで取得できる記事の上限は 100 件です。
本稿では、記事の名前をフルパス(Qiita:\ から始まるパス)で記載していますが、cd で当該のディレクトリに移動すると、記事をその名前({id}_{name}.md)だけで指定できます。ディレクトリと記事の名前は Tab もしくは Ctrl+Space で自動で補完されるため、手入力する必要はありません。
タグがついた記事を探す
Qiita:\Tags\ フォルダには、人気のあるタグが 100 個、既定で表示されます。それ以外のタグフォルダも mkdir もしくは cd で作成できます。
cd Qiita:\Tags
dir PowerShell # "PowerShell" タグがついた記事を一覧表示
cd ほえほえ # "ほえほえ" タグフォルダを作成して移動
dir # "ほえほえ" タグが付いた記事を一覧表示
cd Qiita:\Tags
rmdir * # タグフォルダをすべて削除
dir -Force # 既定の人気タグ 100個が復活します
記事を検索する
Qiita:\Search\ フォルダでは、API により任意のキーワードで記事を検索できます。dir <キーワード> で検索フォルダの作成と検索を同時に行います。
cd Qiita:\Search
dir PowerShell # "PowerShell" 検索フォルダを作成して検索
cd ほえほえ # "ほえほえ" 検索フォルダを作成して移動
dir # "ほえほえ" で記事を検索
cd Qiita:\Search
rmdir * # 検索フォルダをすべて削除
キャッシュ済みの記事を全文検索する
Search-QiitaContent コマンドは、キャッシュ済みの記事を全文検索します。検索対象の記事一覧は、-Path パラメータで指定します。指定しない場合は、カレントフォルダの記事を検索します。
# キーワードで検索
cd Qiita:\CachedItems # キャッシュされたすべての記事
Search-QiitaContent PowerShell # "PowerShell" で全文検索
# "PowerShell" タグがついた記事を "API" で全文検索
Search-QiitaContent API -Path Qiita:\Tags\PowerShell
# Tags, Users, Search, Me など全フォルダを横断検索
Search-QiitaContent Docker -Recurse
# 前後行も表示
Search-QiitaContent error -Context 2
# ファイル名(記事タイトル)をワイルドカードで絞り込み
Search-QiitaContent git -Path Qiita:\Me\Items\*PowerShell*
Search-QiitaContent は dir や Get-Content で取得済みの記事本文を、ローカルで全文検索します(API を呼び出さないので高速)。-Recurse を付けると Tags、Users、Search、Me などの全フォルダを横断検索できます。マッチしたキーワードは黄色でハイライト表示されます。
記事を読む
記事の本文は初回アクセス時に API で取得し、以降はメモリキャッシュから読み出します。
# Markdown として表示
Get-Content Qiita:\Tags\PowerShell\24dd_いま一番新しい、Git の使い方を学ぶ方法.md
# Qiita のページをブラウザで開く
Open-QiitaPage Qiita:\Tags\PowerShell\24dd_いま一番新しい、Git の使い方を学ぶ方法.md
# 既定のアプリで開く(.md に関連付けされたエディタ等)
Invoke-Item Qiita:\Tags\PowerShell\24dd_いま一番新しい、Git の使い方を学ぶ方法.md
# MarkdownPointer で表示
mdp Qiita:\Tags\PowerShell\24dd_いま一番新しい、Git の使い方を学ぶ方法.md
Invoke-Item(別名: ii)はフォルダに対しても使えます。フォルダを Invoke-Item すると、対応する Qiita の Web ページがブラウザで開きます。
# タグページをブラウザで開く
ii Qiita:\Tags\PowerShell
MarkdownPointer(mdp)については、下記をご参照下さい。
URL / ID で記事を取得する
# URL で取得(ブラウザからコピーしてください)
Get-QiitaItem https://qiita.com/user/items/abc123
# URL をプロバイダパスに変換して Get-Content で読む
Resolve-QiitaPath https://qiita.com/user/items/abc123 | Get-Content
# キャッシュ済みの記事を短縮 ID で取得
Get-QiitaItem 1c6b
上記により取得した記事は、Qiita:\CachedItems\ にキャッシュされます。
実用的なユースケース
自分の記事のパフォーマンスを確認する
Qiita:\Me\Items\ フォルダで dir を実行すると、ページビュー数(views) も取得できます。
# 自分の全記事を一覧
cd Qiita:\Me\Items
dir -First 100
# いいね数でランキング
dir | Sort-Object LikesCount -Descending
# 統計サマリー
dir | Measure-Object -Property LikesCount, StocksCount, PageViewsCount -Average -Sum -Maximum -Minimum
Select-Object や Sort-Object の直後で Tab もしくは Ctrl+Space を押すと、有効なプロパティ名(たとえば LikesCount や PageViewsCount など)を自動で入力できます。
記事に誰がいいね・ストックしたか確認する
Qiita:\ItemDetails\ フォルダでは、記事ごとのコメント・いいね・ストックを閲覧できます。下記のコマンドを実行する前に、対象の記事を取得しておいて下さい。(Qiita:\Me\Items\ で dir したり、Get-QiitaItem で取得できます。)
# 記事のいいねしたユーザー一覧
dir Qiita:\ItemDetails\24dd*\Likes
# ストックしたユーザー一覧
dir Qiita:\ItemDetails\24dd*\Stockers
# コメント一覧
dir Qiita:\ItemDetails\24dd*\Comments
# コメント本文を読む
Get-Content Qiita:\ItemDetails\24dd*\Comments\*
# コメント・いいね・ストックを一括取得
dir Qiita:\ItemDetails\24dd* -Recurse
上記では、取得済みの記事を指定できます。記事名の指定にはワイルドカード(アスタリスク)が使えるので、短縮 ID の先頭だけ覚えておけば十分です。(短縮 ID を入れて Tab を押すと、完全な名前が自動で入力されます。)いいねやストックをしたユーザーの名前は Qiita:\Users\ に自動で追加されるため、そこからそのユーザーが書いた記事を辿ることもできます。
フォロワー・フォロー中ユーザーの記事を読む
# フォロワー一覧
dir Qiita:\Me\Followers
# フォロー中のユーザー一覧
dir Qiita:\Me\FollowingUsers
# 特定ユーザーの記事
dir Qiita:\Me\FollowingUsers\someone
# 上記のユーザーは、すべて Users フォルダに集約されている
dir Qiita:\Users
CSV にエクスポートする
dir Qiita:\Me\Items -First 100 |
Select-Object Title, LikesCount, StocksCount, PageViewsCount, CommentsCount, CreatedAt |
Export-Csv c:my-articles.csv -Encoding shift_jis
定期的に実行すれば、記事のパフォーマンス推移を追跡できます。
記事をローカルにバックアップする
cd Qiita:\Me\Items
dir -First 100 # 記事メタデータをキャッシュに載せる
mkdir C:\backup\qiita\ # コピー先フォルダを作成
Copy-QiitaItem * C:\backup\qiita\
Copy-QiitaItem はワイルドカードに対応しているので、一括バックアップが簡単です。dir で一覧を取得しておくと、その記事がキャッシュに乗り、* で対象にできます。
対象の記事を、パイプで流し込むこともできます。
dir Qiita:\Me\Items -First 10 | Copy-QiitaItem -Destination C:\backup\qiita\
コピー先フォルダは事前に作成しておいてください。
いいねが多い記事だけを抽出する
dir Qiita:\Tags\Python -First 100 |
Where-Object { $_.LikesCount -ge 10 } |
Sort-Object LikesCount -Descending
PowerShell のパイプラインをそのまま使えるので、フィルタリングやソートも自由自在です。ただし、ソートやフィルタの対象は dir で取得済み(キャッシュ済み)の記事に限られます。-First 100 で多めに取得してからパイプに流してください。より多くの記事をキャッシュしたい場合は、続けて -Skip 100 -First 100 を指定して実行します。
PowerShell.MCP と連携する
PowerShell.MCP を併用すると、AI が直接 Qiita: ドライブにアクセスできます。AI は QiitaDrive の使い方を Get-Help コマンドで自動的に学習し、すぐに Qiita: をナレッジベースとして活用し始めます。
たとえば、次のようなプロンプトを試して下さい。
New-QiitaDrive を実行して。QiitaDrive module の使い方を確認して
Qiita: で、キャッシュ済みの記事から MCP に関する記述を探して
私の記事のいいねやページビューを追跡する .ps1 スクリプトを書いて
Qiita の記事を操作する .ps1 スクリプトを AI に書いてもらえば、より高度な操作が可能になります。しかも、そのスクリプトは AI が実行することも、手作業で実行することもできます。
PowerShell.MCP については、下記をご参照下さい。
技術的な補足
QiitaDrive は C# で実装された binary module です。PowerShell の NavigationCmdletProvider と IContentCmdletProvider を実装しており、dir、cd、Get-Content といったファイルシステム操作をそのまま Qiita API に変換します。
タブ補完はキャッシュベースで動作します。API を叩かないのでレスポンスは即時です。Tags フォルダでは人気タグ上位 100 件が初回アクセス時に取得され、補完候補になります。使っていくとキャッシュが充実し、補完候補も増えていきます。
ファイル名の仕組み
記事は {短縮ID}_{タイトル}.md の形式で表示されます。
c3f4_MCP 時代の到来とアプリ開発の新常識.md
24dd_いま一番新しい、Git の使い方を学ぶ方法.md
Qiita の記事 ID は 24dd38c8e213638cb35e のような 20 文字の 16 進数です。Git のコミットハッシュと同様に、先頭の数文字だけで一意に識別できるため、デフォルト 4 文字に切り詰めています。キャッシュ内で衝突が起きた場合にのみ、自動的に桁数が増えます。
キャッシュの管理
QiitaDrive はインメモリキャッシュを使います。時間経過で自動的に無効になることはなく、セッション中は明示的にクリアするまで保持されます。
# キャッシュを無視して再取得
dir Qiita:\Tags\PowerShell -Force
# 特定パスのキャッシュをクリア
Clear-QiitaCache -Path Tags/PowerShell
# ワイルドカードで複数タグのキャッシュをクリア
Clear-QiitaCache -Path Tags/Power*
# フォルダ単位でキャッシュ削除(Remove-Item でも可)
Remove-Item Qiita:\Tags\Python
# 記事単位でキャッシュ削除
Remove-Item Qiita:\Me\Items\7b42*
# 全キャッシュクリア
Clear-QiitaCache
Remove-Item は個別の記事やフォルダのキャッシュ削除に対応しています。不要な記事をキャッシュから除外してから Sort-Object や Measure-Object に流すと、必要な記事だけを対象に分析できます。
コマンドレット一覧
| コマンド | 説明 |
|---|---|
New-QiitaDrive |
Qiita ドライブをマウント(OAuth またはトークン指定) |
Get-QiitaItem |
URL / ID で記事を取得 |
Resolve-QiitaPath |
URL / ID をプロバイダパスに変換 |
Copy-QiitaItem |
記事をローカルファイルにコピー(ワイルドカード対応) |
Open-QiitaPage |
Qiita の対応ページをブラウザで開く |
Search-QiitaContent |
キャッシュ済み記事の全文検索(-Recurse で横断検索) |
Get-QiitaComment |
URL / ID でコメントを取得 |
Clear-QiitaCache |
キャッシュをクリア(パス指定・ワイルドカード対応) |
動作環境
- PowerShell 7.4 以降
おわりに
QiitaDrive を使うと、ブラウザでは手間のかかる操作を PowerShell のワンライナーで実現できます。
- 自分の記事の PV・いいね・ストックを集計
- 記事ごとのいいね・ストックしたユーザーを一覧
- 特定タグの人気記事を一括チェック
- Qiita 全体の新着記事をターミナルで流し読み
- フォロワーやフォロー中ユーザーの記事を横断閲覧
- 記事のローカルバックアップ
- パイプラインを活かした柔軟な検索・フィルタリング
リポジトリ: https://github.com/yotsuda/QiitaDrive
Install-PSResource QiitaDrive
New-QiitaDrive
dir Qiita:\
ぜひお試しください。

