Okada Hiroshi の blog

typo が多いです

markdown-it のプラグインを書いてみました

nodejs の有名な Markdown パーサの markdown-it で 出力される html のエレメントタイプごとに class 属性を追加したかたので

www.npmjs.com

というプラグインを書いてみました。

markdown-it の内部構造はよくわかっていないので、他のプラグインのコードを参考に書きましたが、パフォーマンス等は悪いと思います。

$ npm install markdown-it @toycode/markdown-it-class --save-dev

みたいにインストールして

const MarkdownIt = require('markdown-it')
const markdownItClass = require('@toycode/markdown-it-class')
 
const mdText = '# テスト文書\n## サブタイトル\n今日は良い*天気*です'
const mapping = { h1: ['title', 'is-4'], h2: 'subtitle', em: 'tag' }
const md = MarkdownIt().use(markdownItClass, mapping)
console.log(md.render(mdText))

<h1 class="title is-4">テスト文書</h1>
<h2 class="subtitle">サブタイトル</h2>
<p>今日は良い<em class="tag">天気</em>です</p>

のようにクラスが付加できます。

EDINET API 仕様書説明会に参加しました

今までは、EDINET から有価証券報告書等の書類をダウンロードするには。手作業でEDINETの閲覧画面から取得するか、ウェブスクレイピングするか、第三者が開発したツールやAPIを使う必要があって非常に面倒なものでした。

幸いなことに、来年3月下旬より API を使って、書類の一覧の取得とダウンロードができるようになると言うことなので、今日説明会に行ってきました。

金融庁に行くのははじめてなので、ちょっと緊張しました。 f:id:OkadaHiroshi:20180821202051j:plain

説明は非常にわかりやすく、 API も REST (しかも GET だけ) なので、誰でも簡単に書類をダウンロードするプログラムを書けそうです。 ( 一覧等の情報は JSON で返ってくる )

なお、今後は以下のスケジュールで進行するようなので、 EDINET閲覧のサイト等をチェックしておいた方がよいと思われます。

日程 イベント
9月下旬 EDNET API 規約案、API仕様書案を EDINET閲覧サイトに公開。
11月〜12月上旬 外部接続実施要領を EDINET閲覧サイト上に公開。外部接続テストの参加希望者を募集。EDINET API利用者向けのサンプルプログラム、書類一覧のサンプルデータを掲示
12月中旬 外部接続テスト参加希望者に個別にスケジュールを連絡
2019年1月中旬〜2月末 β版を用いた外部接続テストを実施
3月中旬 本番サービス開始

EDINET から有価証券報告書・取引報告書をダウンロードしてくる CLI ツールを(node.jsで)作成しました。

株式投資をしていると、有価証券報告書を読んで分析する必要があります。

日本の会社の有価証券報告書は、EDINET という所からダウンロードできるようになっているのですが、 SSL 証明書が 政府認証基盤(GPKI) なので、ブラウザーによっては認証局を追加しないと警告がでたりして面倒です。

そのそも Webサイトをブラウザーで開いて、検索して、ダウンロードボタンを押してと、結構手間がかかって面倒くさいです。

もちろん探すと、いつくつかそれを簡単にできるようにしてあるサイトやサービスがあるのですが、どれも本格的すぎて今ひとつ僕の要求とは一致しませんでした。

そこで node.js でコマンドライン証券コード又は EDINET で指定しただけで、簡単にダウンロードできる CLI コマンドを作りました。

EDINETでは、平成31年3月下旬からEDINETに提出された書類を取得するAPI(EDINET API)の提供を予定しています。

ということで、それ以降だと、簡単に API を呼び出して書類を取得できそうですが、今はまだできないので

github.com

を利用して、ごりごり スクレイピング をすることにしました。

一応 npm として公開してあるのでもしよろしけば使ってみて下さい。

インストール方法

  • Node.js は 8.11 以上のものをインストールしてください

開発は、 ubuntu デスクトップ上で、10.8.0 Current で開発しています。

動作確認は Windows Server 2016 と macOS High Sierra でも行っています。

  • コマンドをインストールします。

グローバルではなくて適当なディレクトリを作ってそこに入れた方が良いでしょう。

$ mkdir 適当なディレクトリ
$ cd 適当なディレクトリ
$ npm i @toycode/getufo

使い方の例

$ npx getufo はてな
E32141, 39300, 株式会社はてな, カブシキガイシャハテナ, Hatena Co., Ltd
$ npx getufo E02144
$ npx getufo 7832
  • 引数を何も与えないとヘルプを表示します。
$ npx getufo

  Usage: getufo [options] <codes>

  Download financial statements from EDINET.

  Options:

    -v, --version          output the version number
    -f, --folder [folder]  Set download folder (default: current working directory)
    -n, --numpdf [num]     How many pdf files to download (default: 4)
    -h, --help             output usage information


    Codes are either security codes, EDINET codes or fund codes.

  Extra:
    Enter a part of the company name instead of the code to display
    a list of codes. (In this case, nothing is downloaded.)

リンク

www.npmjs.com

GitHub - HiroshiOkada/getufo: Download securities reports from EDINET

以上です。

Google スプレッドシートで Markdown の表を作成 (車輪の再々発明)

車輪の再々発明であるのは知っているのですが、必要に迫られた上に安全性を確認できないプラグインGoogle スプレッドシートのアプリで走らせたくなかったので、 Google スプレッドシートMarkdown の表を作成するスクリプトを書きました。

Google スプレッドシートの選択範囲をマークダウンの表にする(gist)

f:id:OkadaHiroshi:20180729202620p:plain

Google AppsスクリプトJavaScript エンジンはかなり古いので、ちょっと戸惑いました(結局 babel で変換した)。

Google スプレッドシートのコードエディタに上のスクリプトを貼りつけて開き直すと メニューに Utils -> 選択範囲をmarkdownの表に という項目が増えるので、適当な範囲を選択して実行すると markdown にしたものをダイアログ上で表示してくれます。

初回実行の時は、セキュリティーのためのダイアログが出るので承認してあげる必要があります。


f:id:OkadaHiroshi:20180726152656p:plain


f:id:OkadaHiroshi:20180726152752p:plain


f:id:OkadaHiroshi:20180726152846p:plain

詳細の部分が隠れているので開く必要あり。


f:id:OkadaHiroshi:20180726152932p:plain

1月に読んだ本

これから毎月読んだ本を記録することにしました。

人生にゆとりを生み出す 知の整理術 (pha)

人生にゆとりを生み出す 知の整理術

人生にゆとりを生み出す 知の整理術

この本の基本的なテーマは、自分の考え方とも一致するし、他の書籍でも言及されていて今更という感じもするけれども、いろいろ実践的な Tips が詰まっていて参考になりました。

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド (高橋宣成)

GoogleAppsScript の日本語の本は珍しいので応援したのですが、正直言って前半の JavaScript の文法等の解説は他の本や Web の情報でも十分賄えるので不要だと思いました。 それよりももうすこしパーミッションに関連についての解説を充実させて欲しかったです。 API や Web アプリとして公開する場合の情報もほとんど書かれていないので、少し肩透かしを食らった感じです。

天鳴地動 アルスラーン戦記14, 戦旗不倒 アルスラーン戦記15, 天涯無限 アルスラーン戦記16 (田中芳樹)

天涯無限 アルスラーン戦記 16 (カッパ・ノベルス)

天涯無限 アルスラーン戦記 16 (カッパ・ノベルス)

アルスラーン戦記もやっと完結したので最後の3冊をまとめて読みました。終盤になって大量にキャラクターが死ぬのは構わないのだけれども、ちょっと敵がショボすぎる感じがしていまいち盛り上がりに欠けるような気がしました。

クロックワーク・ロケット, エターナル・フレイム (グレッグ・イーガン)

 
エターナル・フレイム (新☆ハヤカワ・SF・シリーズ)

エターナル・フレイム (新☆ハヤカワ・SF・シリーズ)

残念ながら グレッグ・イーガン の理論パートは僕にはちょっとちょっと難しすぎるけれども、ストーリー的にも十分面白いので頑張って読んでみました。一応アロウズオブタイムも読むつもりです。

自宅の Linux サーバーにハードディスクを増設しました。

しばらくぶりに自宅の Linux サーバーにハードディスクを増設したので記録しておきます。

自宅サーバーでそれほど重要なデータでもないので、普通のPC用のハードディスクを増設しました。

ハードディスクの増設は何回もやったことがあるのですが、 最近はGUIで設定してばかりだったので、コマンドラインでやるのは久しぶりです。

増設前の /etc/fstab は以下のようなものでした。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=9a65b311-ec87-47ae-9a45-5d1c0636d912 /               ext4    errors=remount-ro 0       1
# /tmp was on /dev/sdb2 during installation
UUID=5550e624-abfb-49eb-8708-06c7b0df64e6 /tmp            ext4    defaults        0       2
# swap was on /dev/sdb1 during installation
UUID=95b623db-53b0-4bd4-bce3-de3dc817bceb none            swap    sw              0       0

今度増設するドライブは /dev/sdc になります。 GPT ディスクなので フォーマットには gdisk コマンドを使いました。

$ sudo gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o   「新しい空の GUID partition table (GPT) を作成」
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n「新しいパーティションを作成」
Partition number (1-128, default 1): 
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w 「パーテーションテーブルを書き込んで終了」

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.

hiroshi@hp1:~$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
$ 

次にファイルシステムを指定してフォーマットします

$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  
$

lsblk で UUID を確認します

$ lsblk -o NAME,UUID
NAME   UUID
sda    
└─sda1 9a65b311-ec87-47ae-9a45-5d1c0636d912
sdb    
├─sdb1 95b623db-53b0-4bd4-bce3-de3dc817bceb
└─sdb2 5550e624-abfb-49eb-8708-06c7b0df64e6
sdc    
└─sdc1 3627b957-fd37-4147-84e4-62ff8400d177

/etc/fstab に次の行を追記します。

UUID=3627b957-fd37-4147-84e4-62ff8400d177 /srv            ext4    defaults        0       2

$ sudo mount -a でマウントします。

以上でした。