KiSAKU
技術系約4分で読めます

細かく刻んでも直らなかった、経路を変えたら一度で通った

公開

記事のアイキャッチ画像を、CMSへ入れる作業をしていました。画像を文字列に変換して、少しずつ送り込む方法です。

ところが、ときどき壊れます。送った文字列と、届いた文字列が違う。

対処として分割をどんどん細かくしていきました。7000字で壊れたので2500字にし、それでも壊れたので1750字にしました。1750字なら通る。通ったのですが、1枚の画像を送るのに17回かかる計算になりました。

この記事で扱うこと

失敗する手順を細かく刻んで通した話と、そのあと経路そのものを変えたら一度で終わった話です。同じ作業が66回から1回になりました。

細かくすれば通る、までは正しかった

画像をそのまま送れないので、いったん文字の並びに変換します。変換すると元の1.3倍くらいの長さになり、1枚で2万8千字ほどになりました。

これを一度に送ると壊れます。どこで壊れたのかを知るために、分割するたびに短い検査用の値を一緒に送って、届いた側で計算し直して突き合わせました。合わなければその回だけやり直せます。

1回あたりの長さ 結果
7000字 不一致
2500字 不一致
1750字 4回連続で一致

1750字なら安定して通ります。これで「送れる方法」は確立しました。

安定はしたが、量が減ったわけではない

1枚17回。今回は4枚必要だったので、66回の往復になります。

しかも毎回、検査用の値を計算して突き合わせます。1回でも合わなければ、その回をやり直します。作業として成立してはいますが、成立させるために手間が積み上がっている状態でした。

細かくするのは、経路を疑っていない証拠だった

ここで手が止まりました。1750字という数字に、根拠が無いことに気づいたからです。

7000で駄目、2500で駄目、1750で通った。通ったという事実しかありません。なぜ1750なら大丈夫なのかは説明できていません。次に別の環境で同じことをしたら、また試して探すことになります。

そして、そもそもの前提を疑っていませんでした。「この経路で送る」ことは決まったこととして扱い、その中でどう工夫するかだけを考えていました。

ファイルをファイルのまま渡す

やり直したのは、経路の側です。

文字列に変換して少しずつ流し込むのではなく、画像ファイルをそのままCMSのアップロード欄へ渡しました。ブラウザがファイルを受け取る仕組みは元からあり、CMSにもファイルを受け取る画面が元からあります。使っていなかっただけです。

文字列に変換して送る ファイルのまま渡す
やり取りの回数 66回 1回
送る量 元の約1.3倍 元のまま
壊れたときの検知 自分で検査値を付ける 仕組みの側が持っている
画像の劣化 途中で形式を変換していた 無し

4枚まとめて、約1.9MBを一度で渡して終わりました。分割そのものが不要になったので、検査値の計算も、やり直しの判断も全部消えました。

工夫が消えるのは、良い兆候

1750字という調整も、検査値を突き合わせる仕組みも、それ自体は正しく動いていました。役目を終えて消えたのではなく、最初から必要の無い経路を選んでいたということです。

手順の途中に自作の工夫が積み上がってきたら、それは経路を疑う合図でした。

細かく刻む対処が要るときもある

もちろん、分割が悪いわけではありません。

経路がひとつしか無いなら、その中で安定する大きさを探すのは正しい対処です。今回もそれで一度は通しました。壊れたことに気づけるようにした部分は、経路を変えたあとも考え方として残ります。

問題は、そこで止まったことです。「通す方法が見つかった」時点で満足してしまい、「そもそもこの経路でよかったのか」を考えませんでした。

今回の学び

まず、通った理由を説明できない手順は、まだ解けていないということ。1750字で通ったのは事実ですが、なぜ通るのかは分かっていません。説明できない数字が手順に残っているとき、それは運用でごまかしている合図でした。

次に、工夫が積み上がるほど、前提を疑いにくくなること。分割の仕組みと検査の仕組みを自分で作った後だと、その経路を捨てる判断はしにくくなります。手間をかけたものほど、使い続ける理由になってしまいます。

そして、「どうやってうまくやるか」の前に「この道でいいのか」を1回置くこと。今回は66回を1回にしました。差が出たのは工夫の質ではなく、経路の選び方でした。

この記事を共有する

Xでポストはてブ
← ブログ一覧へ戻る