見出し画像

自宅本棚の図書館化 PartEx:iosショートカットで自動化を実現しようの回

こんちゃす!! 今更ですが、あけましておめでとうございます。2025年になりましたね。今年もよろしくお願いいたします。

さて、当noteも今年で5年目を迎えました。5年目ともなると、基本的に電子ゴミばかりこのnoteでも、いささか人気の記事も出てきます。その一つが、「自宅本棚の図書館化」というシリーズになります。

これは2022年の春、自宅の蔵書管理方法を「図書館っぽく」してみたという投稿ですね。

図書館にある本を見ると、背表紙に「請求記号ラベル」というものが貼ってあるかと思います。数字とかアルファベットが書いてあるやつですね。このラベルに書いてある記号が、その図書館におけるその本の住所を示しています。ジャンルごとに記号が割り振られており、近いジャンルの本はちゃんと固まるようになっていますね(哲学であれば10番台など)。

で、上記記事は、これと同じことを自宅の本棚でもやろう!! という企画でした。今でも結構アクセスやいいねがあり、割と好評の記事です。

で、本日はこの記事のアップデート企画となります。題して、「自宅本棚図書館化 PartEx:iosショートカットで自動化を実現しようの回」です。

自動化を実現しよう

上の記事を書いた当時の私は、PCの作業に大変疎く、「自動化」というものを全く知りませんでした。ので、地獄のようなプロセスをすべて手作業でやっていた。怖すぎる。今読むと「こいつマジか……」とドン引きしてしまう。

それから約3年、無事就活も終わり大学院生から「お勤め人」にランクアップ、仕事でも業務の自動化などに関わるようになりました。主にMicrosoftのツールを使って、自動化おじさん(二言目には「それ自動化できるよ」と口出ししてくるおじさん)として元気に働いています。で、この「自宅本棚図書館化作業」についても、もっと効率化できないかということを感じるようになりました。

あと、学生の身分を脱したことで、Excelのライセンスを更新しなくなっちゃったんですよね。ので、今までExcelでやっていたのを、Googleスプレッドシートやその他のツールに置き換える必要も生じました。Microsoftライセンス、なんであんなに高いんでしょうね。みんなでボイコットしてやりましょうよ。

さて、Excelが使えないというわけで、iosアプリの「Numbers」を蔵書表として使うことにしました。その理由が、iosアプリの自動化ツール「iosショートカット」を使って、蔵書表の作成の自動化が行えそうだったからです。
iosショートカットとは、iPhoneやiPadに標準で備わっている自動化ツールです。↓のようなアイコンでiPhoneに最初から入っています。

「見たことはあるけど消しちゃってた」という人が多いのでは

この「ショートカット」というアプリ、本当に本当に面白くて、最近はちょっとした隙間時間があるとこれで無限にアプリを作っています。

で、今日は、この「iosショートカット」を使って、自宅本棚図書館化プロセスをもっと自動化しようという内容です。3年越しのリメイク記事だ。熱い。なお、Androidユーザーはこの先何も有益な話がないのでお帰りください。

何をやっているのか

今回の作業で必要なのは以下の6つです。

  • iPhone(もしくはiPad)

  • iPhoneの「ショートカット」アプリ

  • Cinii Booksのサイト

  • iosの「Numbers」のアプリ

  • 手先の器用さ

  • 諦めないど根性(忍と同じ)

……実質4つですね。

まずは実際にどんなものを作ったのか、gif画像でお見せしたいと思います。

画質が荒くて申し訳ない…..

画質が荒くて申し訳ないですが、やっていることを文字起こしすると、

  1. iPhoneのカメラを起動する

  2. 書籍裏面のバーコードを読み取って、ISBNを取得する。

  3. 取得したISBNから、その書籍の書名・著者名・出版社・請求記号を取得する(この仕組みは後述)。

  4. 取得した情報を、今日の日付とともにNumbersのシートに転記する。

以上です。

上のgif動画だと、児玉聡『ミル 自由論の歩き方』という本の裏面バーコードを読み取って、それを自動でNumbersアプリに転記しています。そういったアプリを自作しました。

このアプリで転記された者たち

これのアピールポイントとしては、

  • スマホカメラから蔵書リストへの登録が行える! 便利!!

  • 全部一から自分で作ってる! ハンドメイド! すごい!!

  • 自家製アプリなので変更も楽々! 例えば「もっと他の情報も一緒に取得したい」となってもちょちょいのちょい!! やったね!!

となります。

以下では、これがどういった仕組みであるかといったことを解説します。

まずiosショートカットとは??

iosショートカットの作成画面

iosショートカットって何?? という人、多いのではないでしょうか。知人でもこれを使っている者には出会ったことがないので、まずはここを簡単に説明します。

iosショートカットとは、iPhone内のアプリを連結したり、色んな情報を取得したり加工したりして、一連の作業の自動化ができるアプリです。
「ショートカット」という名前がわかりづらいなと思うのですが、言ってしまえば「アプリが作れるアプリ」です。作ったアプリはホーム画面に置くことが可能で、タップするとアプリに組み込んだプログラムが実行されます。まあプログラミングの一種と捉えてもらってよいと思います。

試しに作るとこんな感じ

今回の本棚のやつは、結構複雑な作りをしているので、まずは初心者向けに簡単なアプリを作ってみました。やっていることとしては、「今日が火曜日ならパパにゴミ出しのLINEを送り、木曜日ならママにメッセージを送る」というものです。どんな家庭なんだ。

iosショートカットの特徴として、ローコードプログラミングであるというのがあります。ローコードプログラミングというのは、自分で一からコードを書くのではなく、あくまで既存のアクションを組み合わせることでプログラムが作れるというものです。初心者向け…….と言っていいのかはわかりませんが、上の画像を見ても、なんとなく「こういうことをしているんだな」というのは分かりやすいのではないでしょうか。日付を取得したり、テキスト文を作成したり、それを条件に応じてLINEで送ったりできます。このようにLINEとかの他のiPhoneアプリと接続できるのが面白いところですね。

また、こうして作ったフローは、毎日決まった時間に自動で実行したり、アイコンを付けてホーム画面に置いておくことが可能です

←毎朝7:00に実行(上から2番目)
アイコン化してホーム画面に設置→

そんなわけで、ざっくりと「こういうことができるよ!!」という説明でした。

もっと知りたいという人は、noteで「#iosショートカット」と検索するとたくさん出てきます。マジで色んなことができるので要チェック!!!

どんなアプリを作ったの??

脇道の話が長くなりすみません。それで、実際に今回作ったアプリについて説明します。

今回作ったアプリで行っていることを、もう少し詳細に解説すると、次のようになります。途中から意味不明になるので読み飛ばしてOKです。

全体はこんな感じ。
  1. 「バーコードをスキャン」アクションで、本の裏面のバーコードを読み取る。

  2. (バーコードの数値が「978」から始まっていない場合はエラーメッセージを表示し、再撮影させる(ISBNは基本的に978から始まるため))

  3. バーコードの数値が「978」から始まっている場合は、それを変数「ISBN」に格納する。

  4. 変数「ISBN」を、文字列「https://ci.nii.ac.jp/books/search?advanced=false&count=20&sortorder=3&q=」に繋げて、「Cinii Booksのサイトで、このISBNで検索した時の検索ページ」のURLを作り出す。

  5. 「URLの内容を取得」アクションで、上記URLの情報を取得する。

  6. 5で取得したURLの情報から、「検索結果の1番上のリンク」を取得したいので、「テキストを分割」アクションで、上記URLの情報を「<a href="/ncid/」の文字列で区切り、その後、区切った文字列を、さらに「"」で区切り、上記検索ページから「<a href="/ncid/」と「"」で囲まれた文字列を取得する。
    (この部分が、「Cinii Booksで当該ISBNで検索した時の、第一検索結果のURL」となる)

  7. 上記「第一検索結果のURL」に対して、また「URLの内容を取得」アクションを使う。そこで得られた文字列に対して、なんやかんや処理を加えることで(後述)、その本の書名・著者名・出版社・請求記号の情報を取得する。

  8. 現在の日付を取得する。

  9. 書名・著者名・出版社・請求記号・今日の日にちを、一つのリストにまとめる。

  10. Numbersのアプリを開く。

  11. 既に用意していたシートの末行に、上記9のリストを新規行として挿入する。

以上!!!

意味が分からんね!!!!

ついでに、この自作アプリのファイルを↓に置いておきます。iosユーザーなら、下のリンクから、このアプリを自分のiPhoneやiPadに追加できるはず。
ただし実際に使う際は、Numbersのアプリのあたりで個人設定が必要になります。「Numbersのどのシートに転記するか」というのを指定する必要あり。


どのようにスクレイピングをしたのか?

ここからはややマニアックな話になります。
このアプリで肝になるのが、上記説明の4~7に当たる部分です。この箇所では、「ISBNをもとに、CiniiBooksから情報を取得する」ということをやっています。

このように、Webサイトから情報を抜き出すことを「スクレイピング」といいます。で、このスクレイピングはやや難易度が高く、結構苦戦しました。ので、これをどのようにやったかを解説します。ちなみに、あまり綺麗なやり方ではないという自覚はあります。Chu!! コード汚くてごめん!!

URLの内容を取得する

まずですが、Cinii BooksでISBNを検索すると、次の画面のようなURLになります。

ISBNで検索すると、URLにISBNが含まれていることが分かる。

そしてiosショートカットでは、「URLの内容を取得する」という大変便利なアクションが備わっています。いわゆるHTTPリクエストというやつですね。「URLを指定すると、そのURLののWebページの内容を、全部テキストで表現するよ!!」というものになります。

試しに上記のページでURLの内容を取得すると、次のような結果が返されます。

3万字近いテキストが返される。

長すぎるのでさすがに全部は見せられませんが、こんな感じで文字列がばーーっと返されます。

さて、この文字列の中に、「<a href="/ncid/BD09920692" class="taggedlink">ミル『自由論』の歩き方 : 哲学古典授業</a>」というのが存在します。

このBD09920692の部分が非常に重要です。

先ほどの、Cinii BooksでISBNを検索した結果のページから、一番上の検索結果を開いてみます。一番上というか、検索結果は一つしかありませんが、とにかく検索結果として出てきた奴をクリックします。

ページを開いた結果。URLに着目!!!

このページを開くと、その本の著者名・出版社名・請求記号など、今回知りたい情報が全て詰まっています。ので、このページに対して、先ほどと同様に「URLの内容を取得する」を使用して、情報を取得したいわけです。

そうして当該ページのURLを見ると、BD09920692という文字列が含まれていることが分かります。「https://ci.nii.ac.jp/ncid/」という文字列に続けて、このような記号を連ねることで、その本の詳細ページに辿り付くURLになるということですね。

ここまでのことをまとめると、

  1. Cinii BooksでISBNを検索する

  2. 検索したページの情報を取得すると、「BD09920692」という文字列(その本の詳細ページのURLを構成する文字列)を見つけられる

  3. 今度はこの文字列に対して、URLの情報を取得する

  4. 本の著者名等の情報が手に入る

という流れになります。こうして、ISBNを読み取るだけで、その本の情報を取得できる、ということになります。

ただし、これをやるには一つ問題もあります。

再掲。3万字近いテキストが返される。

先ほども載せたように、URLの内容を取得するアクションでは、膨大な文字列のコードが返されます。これをそのままは使えないので、「この文字列の中から、BD09920692の部分だけ取得する」という作業が必要になります。

これについては、「テキストを分割」アクションを使ってみます。

「テキストを分割」アクションを使用する

テキストを分割アクションでは、対象の文字列を指定したうえで、「○○の文字を見つけたら、そこでテキストを分割する」ということが可能です。○○は自分で指定します。

例えば、今回はBD09920692の文字列を抜き出したいわけですが、上記コードを見ると、<a href="/ncid/BD09920692" class="taggedlink">という風になっています。つまり、BD09920692は、<a href="/ncid/"class="taggedlink">に挟まれた文字列であると言えます。

そのため、まずは上記の3万字の文字列を、<a href="/ncid/で分割します。そうすると、上記文字列が<a href="/ncid/の箇所で分割されるので、文字列が「<a href="/ncid/まで」と「その後」に分割されます。

こうすると、「その後」の方の文字列は、BD09920692" class="taggedlink">………から始まることになります。なぜなら、<a href="/ncid/で分割しており、これに続く文字列はBD09920692だからですね。難しいですが、やってみればまあ分かります。

こうして分割を行うと、結果が「リスト」として保存されます。リストの1項目目は、上で言う<a href="/ncid/までとなります。リストの2項目目は、『その後」のBD09920692" class="taggedlink">………となります。

ここで「リストから項目を取得」アクションを使います。このアクションで、「リストの2項目目」を取得することで、BD09920692" class="taggedlink">………という文字列をGETすることができます。

で、今度はこの分割後のテキストを、さらに"で分割します。そうすると、BD09920692" class="taggedlink">………の文字列が、"で分割されることになるので、

BD09920692
" class="taggedlink">………

という形になります。そして、今度は「リストの項目を取得」アクションで、リストの1項目目を取得することで、ようやくBD09920692の部分だけが手に入るというわけですね。

BD09920692の部分が手に入ったので、これを使って、URLの内容を取得してみます。その本の詳細ページの情報が手に入ります。

今度は6万字ぐらいになる。

この文字列の真ん中あたりに注目してみましょう。

{
"@context": "http://schema.org",
"@type": "Article",
"name": "ミル『自由論』の歩き方 : 哲学古典授業",
"alternateName": "ミル自由論の歩き方 : 哲学古典授業",
"author": {
"@type": "Person",
"name": "児玉聡著"
},
"publisher": {
"@type":"Organization",
"name": "光文社"
},
"datePublished": "2024.12",
"description": "表現種別:

となっている箇所があります。著者名の「児玉聡」、出版社名の「光文社」の記載が見えますね。ついでに出版年の「2024.12」の記載もあります。

ということは、この部分に対して、先ほど同様に「テキストを分割」アクションを使っていけばいいわけです。これを地道に繰り返すことで、著者名・出版社名・請求記号などの情報を取得することが可能です。

で、あとはこれらの情報をまとめて、Numbersに転記するだけですね。ちなみにNumbersを使ってる理由は、GoogleスプレッドシートやExcelでは、「新しい行に書き込む」というアクションが用意されていないためです。iosのショートカットなので、基本的にiosアプリの方ができることが多いです。

このように、「アクションとして用意されていることしかできない(自由度が低い)」というのは、ローコードプログラミングの弱点でもありますね。

終わりに

いかがでしたでしょうか!? 今回作成したこの自動化アプリによって、これまで1冊あたり3分ほどかかっていた作業が、ものの数秒で完遂できるようになりました。めちゃ便利!!

で、職場でもよく自動化をしているのですが、自動化の一番の利点は、作業の負担の軽減にあると思っています。時短というのも確かにそうなんですが、プログラミングの学習時間やコード作成時間を考えると、必ずしも全体的な時間が短くなることばかりではないかもしれません。

ただ、一回作ってしまえば、作業の負担が確実に減ります。一つ一つの作業が面倒だと、どうしても途中でやめちゃったり心労が溜まったりしがちなんですよね。ので、こうしてボタン一つで実行できるようにしておくことで、これからも継続して「所蔵本の登録」ということを行っていけます。えらい!! やった!!!

…….まあ請求記号のラベルを作成したりそれを貼ったりという作業はこれまで通り手作業なんですが、、、

リンクをもう一回置いておくので、興味ある人はぜひダウンロードしてみてください。ダウンロードも簡単です!! Numbersの設定をお忘れなく!!

そしてiosショートカット、知名度がいまいちですが、やり始めるとハマる要素が多いのでぜひ皆さんも遊んでみてください。僕自身、プログラミングド素人のド文系人間でしたが、1年弱仕事で関わっただけでも、だいぶ「自動化おじさん」としての品格が生まれてくるようになりました(品格.....?)。皆さんも、プログラミングというものを怖れず、一歩踏み出してみることで、新たな世界が開けるかもしれません。

そんなわけで、特にオチとかもなく、今日の記事は以上です。