My APP Website
 連番ダウンローダー



●はじめに

連番ダウンローダーはCLIツールです。macOSではGUIな使い勝手を実現できますが、CLIツール自体にUIはありません。一般的なアプリとは少し違うことをお知りおきください。

●概要

Web上の連番関係なファイル名を持つ一連のファイルをダウンロードします。
連番であればファイルの種類を問いませんが、特に画像であることを意識した機能を有します。異なる形式を探す機能、ダウンロード後に形式を変換する機能を有します。
初期設定では非常に限定した形式の画像ファイルのみをダウンロード対象とします。
ダウンロード自体は最低限の機能しかありません。分割ダウンロード、レジューム、認証のような機能はありません。

●動作環境

macOS Big Sur 11.5 ~ Tahoe 26.3
※動作検証はmacOS Tahoe 26.3のみ

●使い方

ここではGUI操作で実行ファイルを実行するために、macOSのメニューバーから実行する方法を説明します。お好みに応じてご自身で異なる実行方法を採用し、説明を適切に読み替えてください。



インストール
(1)ダウンロードしたファイルを解凍し、任意の場所に保存する。
※実行時に実行ファイルと同じ場所に複数の関連ファイルを生成することをご承知おきください。
(2)macOSのプリインストールアプリ「スクリプトエディタ」を起動し、スクリプトエディタの設定から「メニューバーにスクリプトメニューを表示」にチェックを入れる。
(3)macOSのメニューバーのスクリプトアイコンをクリックし、「スクリプトフォルダを開く」→「ユーザスクリプトフォルダを開く」をクリックする。
(4)テキストエディタで「do shell script "/Users/user/tool/dlSerialFile"」と書いたファイルを作成し、ユーザスクリプトフォルダに保存する。
※パスは実行ファイルを示すよう適切に読み替えてください。
※文字コードはUTF-8、改行コードはLFとしてください。
※拡張子は「txt」ではなく「scpt」としてください。



初期設定
(1)クリップボードがURLを含んでいないことを確認して、スクリプトを実行する。
※クリップボードにURLな文字列があるとき、デフォルトの設定でダウンロードを開始します。初期設定を確認してからダウンロードするために、初回はクリップボードにURLを含まずに実行することをお勧めします。
(2)実行ファイルの保存場所に生成される「dlSerialFile_config.json」をテキストエディタで開く。
※実行ファイルのファイル名を変更している場合は、異なるファイル名になります。
(3)設定内容を確認し、必要に応じて適切に編集して上書き保存する。
※各項目に関する説明は別項をご確認ください。



連番ダウンロード
(1)ダウンロードしたい連番ファイル群の、連番の値が最も大きいURLをクリップボードにコピーする。
(2)スクリプトを実行する。
(3)全てのダウンロードが完了したとき、macOSの通知センターに通知します。

●仕様と挙動

【起動】

このソフトは起動時に実行ファイルの場所を引数で取得できることを前提に設計されています。次のような方法で起動すると想定外のパスが渡されて正しい場所に関連ファイルを作れなかったり、空の配列が渡されて異常終了する可能性があります。

【異常終了を誘発する可能性がある起動方法の例】
非常に低レイヤーなコードで実行ファイルを呼び出す。
Automatorで実行ファイルをアプリケーションバンドル化して実行する。
サンドボックス環境で実行する。



【関連ファイル】

実行ファイルと同じ場所に複数の関連ファイルを生成します。
「dlSerialFile_que.txt」が他のソフトに占有されているとき、解放されて読み書き可能になるまで待って停止します。タイムアウトはありません。他のソフトで開いたままにしないようご注意ください。
「dlSerialFile_config.json」は設定です。説明は別項をご確認ください。
ログは最大で3999行まで保持し、それ以上は古いものから削除します。



【URLの取得】

URLはクリップボードを読み取って取得します。URLではない文字列が含まれているとURLとして判断しません。
複数のURLを同時に取得可能です。ただし1行に1つのみのURLとし、複数行をクリップボードにコピーしてください。



【ダウンロード】

受け取ったURLのファイル名に含まれる最も右側の数字を連番の値として解釈します。受け取ったURLが連番の最大値として、1つずつ小さな番号に置き換えてダウンロードを試みます。
複数ファイルの同時ダウンロードは行いません。
 
連番ファイル群の拡張子の書式が一様ではないことを想定します。拡張子の書式が、受け取ったURLと同じ、全て大文字、全て小文字の場合についてダウンロードを試みます。
例として、実行ファイルに03.jPgを渡してダウンロードを開始した場合、03.jPgが無いなら03.jpgや03.JPGのダウンロードを試みます。
連番ファイル群のファイル形式が一様ではないことを想定します。1つの番号のダウンロードが失敗したとき、直ちに次の番号のダウンロードを試みるのではなく、拡張子を置き換えてダウンロードを試みます。対象の拡張子は設定で指定します。
例として、03.jpgが無いなら03.pngや03.gifのダウンロードを試みます。
連番ファイル群のゼロ埋めが一様ではないことを想定します。連番部分のゼロ埋めなしと、ゼロ埋め桁数が受け取ったURLと同じについてダウンロードを試みます。
拡張子の書式、ファイル形式、ゼロ埋め有無は、ダウンロード成功したものを優先して試みます。
例として、03.jPgを渡してダウンロードを開始した場合、連番「3」は03.jPgのダウンロードを最初に試みます。しかし03.jPgが無く3.pngを得られたなら、連番「2」は2.pngのダウンロードを最初に試みます。



【保存】

ダウンロードしたファイルは設定で指定したフォルダに保存します。
1つのURLからダウンロードした一連の連番ダウンロード群1組毎に、1つのサブフォルダを作りその中に保存します。サブフォルダ名はダウンロードを開始したときの日時と8桁の乱数で決めます。
ダウンロード元のURLに関係無く、連番部分をゼロ埋めしたファイル名で保存します。



【形式変換】

1つのURLから連番ファイル群をダウンロードし終えた後、それらのファイルの形式が一様ではなかったら、形式を変換して1種類に統一します。
例として、設定が["webp","jpg"]の場合、01.jpgと02.webpを得たなら01.jpgをWebP形式に変換し、変換元はごみ箱へ移動します。
現在のバージョンでは、WebP, JPEG, PNG, GIFに対応します。
JPEG形式の拡張子は、"jpg", "jpe", "jpeg", "jif"で指定できます。ただし現在のバージョンでは、異なる拡張子は異なる形式として扱います。jpgとjpeを得たなら双方共JPEG形式ですが片方は再エンコードして拡張子を統一します。
 
JPEG, PNG, GIFのデコードはAppleのImage I/Oフレームワークを使用します。
WebPのデコードはGoogleのlibwebpライブラリを使用します。
デコードして得られた画素はImage I/Oフレームワークの描画エンジンで解釈してからエンコーダに渡します。これにより色順序や色空間を正しく反映します。
JPEG, PNG, GIFへのエンコードはAppleのImage I/Oフレームワークを使用します。JPEGは品質係数を指定できます。その他の指定はありません。全てデフォルトでエンコードします。JPEGはそこそこの品質を持っていると思います。PNGの圧縮率はPhotoshopなどと比較すると、あまり良いとは言えないと思います。
WebPへのエンコードはGoogleのlibwebpライブラリを使用します。非可逆圧縮します。品質係数は指定できますが品質係数以外の値はainame/Swift-WebPライブラリのプリセットpictureを用います。
 
メタデータは保持しません。



【多重起動】

macOSでは、CLIツールの実行ファイルは呼び出される度に新しいプロセスとして実行します。しかしこのソフトでは複数の同時ダウンロードを行わないように動作します。
新しいプロセスは先に動作中のプロセスが無いことを確認すると、自身がダンロード実行者として動作します。
先に起動したプロセスが動作中のときに次のプロセスが起動した場合、新しいプロセスは追加者として動作し、URLをダウンロード待ちに追加するだけの動作を行います。
 
実行者の存在有無と追加者が追加するURLは「dlSerialFile_que.txt」(以下キューファイル)で管理します。
キューファイルを正しい場所に生成できない場合は正常に動作できません。従って起動時に実行ファイルの場所を正しく得られることが重要です。
また、複数のプロセスが同時にキューファイルへの読み書きを試みて競合することを防止するために、排他制御して読み書きします。従って、他のソフトがキューファイルを開いたままにして占有すると、解放を待って停止します。



【その他】

全く同じURLを複数個受け取った場合、2個目以降はダウンロード対象外とします。ただし履歴保持は1つのプロセスの間のみ持続します。全てのダウンロードが完了して実行者のプロセスが終了するとき、ダウンロード実行履歴は破棄します。

●設定

実行ファイルを実行したとき、実行ファイルと同じ場所に「dlSerialFile_config.json」ファイルを生成します。テキストエディタで開いて編集してください。

実行ファイルは設定内容の安全確認を行いません。極端な値や誤った内容でもそのまま実行しますので、ご注意ください。
JSONの解釈はSwiftのJSONDecoderに依存します。JSONとして解釈できない場合や期待した構造でないとき、実行ファイルは設定ファイルをデフォルトで上書きしデフォルトで動作します。

dlSerialFile_config.json
 convertable
  auto:Bool型
ダウンロード後の形式変換を行うか否かを指定します。
trueの場合、ダウンロードした連番ファイル群が複数種類の形式で構成されていたなら、形式を変換して1種類に統一します。優先順位はdownloadTargetのextsの順です。
例として、extsが["webp","jpg"]の場合、01.jpgと02.webpを得たなら01.jpgをWebP形式に変換し、変換元はごみ箱へ移動します。
  force:String型
ダウンロード後の形式変換で変換先の形式を指定します。
autoがtrueのときに有効です。指定しないなら空の文字列です。
ダウンロードした連番ファイル群が1種類のみの形式で構成されていても変換するときに指定します。
 downloadSave
  directory:URL型
ダウンロードしたファイルを保存する場所を指定します。デフォルトはデスクトップフォルダです。
バックスラッシュ等の文字はエスケープが必要です。
  file_zeroPadding:Bool型
ダウンロードしたファイルを保存するとき、ファイル名の連番部分をゼロ埋めするか否かを指定します。
ゼロ埋め桁数は最初にダウンロードを開始するときに実行ファイルが受け取った文字列に合わせます。
例として、実行ファイルに01.jpgを渡してダウンロードを開始した場合、実際には1.jpgをダウンロードしても、保存時のファイル名は01.jpgです。
  file_zeroPadding_digitMin:Int型
ダウンロードしたファイルを保存するときの、連番部分のゼロ埋め最小桁数を指定します。file_zeroPaddingがtrueのときに有効です。
 downloadTarget
  exts:String型配列
ダウンロード対象のファイル形式を指定します。
連番の中に拡張子が異なるファイルがあるとき、ここで指定した拡張子を探してダウンロードを試みます。
例として、03.jpgが無いなら03.pngや03.gifのダウンロードを試みます。
この項目は全て小文字で記してください。ここで大文字を指定しなくてもダウンロードは拡張子が大文字と小文字と引数と同じを試みます。
例として、実行ファイルに03.jPgを渡してダウンロードを開始した場合、03.jPgが無いなら03.jpgや03.JPGのダウンロードを試みます。
  numRange_max:Int型
連番の最大値を指定します。
実行ファイルに渡す引数の連番部分の値がこの値以上のとき、エラーとして扱います。
  numRange_min:Int型
連番の最小値を指定します。
デフォルトは1ですが、0までダウンロードする場合などに変更してください。
 downloader
  timeoutInterval:TimeInterval型
ダウンロードのタイムアウトまでの時間を指定します。単位は秒です。
SwiftではTimeInterval型なのでここでもそのとおりに説明を記しますが、実体はDouble型です。
  tryCountLimit:Int型
ダウンロードの試行回数を指定します。
 formatConvert
  cgImageNormalize_isOn:Bool型
画像の形式を変換するときに画素の解釈を正規化するか否かをしていします。
trueではデコーダを通して得た画素をそのままエンコーダに渡すのではなく、描画エンジンで解釈してからエンコーダに渡します。これにより色順序や色空間を正しく反映します。しかし、開発者の理解が浅いためにこの機能の実装が誤っている場合、変換後に画像の色が変わってしまうようなことがあるかもしれません。その場合、この項目をfalseにすることで改善できるかもしれません。
  jpegEncode_quality:Float型
JPEGの品質係数を指定します。値の範囲は0.0から1.0です。
これはAppleのImage I/Oフレームワークに渡す値です。他のソフトウェアで用いる圧縮率のような値との関連はありません。
  webpEncode_quality:Float型
WebP非可逆圧縮の品質係数を指定します。値の範囲は0.0から100.0です。
これはGoogleのlibwebpライブラリに渡す値ですが、品質係数以外の値はainame/Swift-WebPライブラリのプリセットpictureを用います。
 z_developerOnly
この項目は開発用です。変更しないでください。
  downloadFolder_notCreateTimestampFolder:Bool型
ダウンロードしたファイルを保存するとき、URL別のサブフォルダを作らないようにします。

●ダウンロード

インストーラはありません。手動で適切にインストールしてください。
旧バージョンの公開予定はありません。

ここをクリックしてダウンロード

●更新履歴

2026-2/22
新規公開