Hero Image
EDINETAPIをPowerShellで触れてみた

動機 EDINETAPIなるものを知ったのでそれをPowerShellで叩いてみたいと思った。 EDINET API とは 先ず、EDINETというのは、金融庁が有価証券報告書などの開示書類を閲覧するためのサイトです。 この開示システムには、EDINET APIというAPIが用意されています。 以下、EDINET_API仕様書.pdfより抜粋 EDINET API は、利用者が EDINET の画面からではなく、プログラムを介して EDINET の データベースから効率的にデータを取得できる API(アプリケーション・プログラミング・ インターフェース)です。EDINET API により、EDINET 利用者は効率的に開示情報を取得 することが可能となります。 そこで、このシステムにふれやすくなるような仕組を何らかの形で用意してあげられればWEBをポチポチする必要がなくなってより便利になるわけですね。 実行方法 大まかなながれとしては、メタデータを取得するエンドポイントにアクセスしてほしい情報を探します。 そして、ほしい情報の文書を取得するエンドポイントにアクセスして任意の形式でファイルを取得します。 各エンドポイントへのアクセスの概要 先ず、メタデータの取得にはREST形式でhttps://disclosure.edinet-fsa.go.jp/api/[バージョン]/documents.jsonに対してGETメソッドを用いてリクエストします。 ちなみに、今回はバージョンについてはv1を使用しました. パラメーターは date (YYYY-MM-DD 形式。最長5年前まで参照可能。) type(任意。 defalt は 1。1:=メタデータのみ 2:=提出書類一覧及びメタデータ) とあります。 実際に使いたい場合はこんな感じですね。 https://disclosure.edinet-fsa.go.jp/api/v1/documents.json?date=2022-08-08&type=2 なので、 #URL $url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json" #以下をparamとしてとる $getUrl2 = $url + "?date=2022-08-08&type=2" #GETでアクセスして結果を絞る $res= Invoke-RestMethod $getUrl2 $res.results | Select-Object -Property 'docID','docDescription','filerName' | Where-Object -Property 'docDescription' -Match '四半期' #こんな感じにとれる docID docDescription filerName ----- -------------- --------- S100OW42 四半期報告書-第75期第1四半期(令和4年4月1日-令和4年6月30日) 上新電機株式会社 S100OVTZ 四半期報告書-第58期第3四半期(令和4年4月1日-令和4年6月30日) 富士製薬工業株式会社 S100OUXV 四半期報告書-第209期第1四半期(令和4年4月1日-令和4年6月30日) 株式会社四国銀行 S100OVEF 四半期報告書-第73期第1四半期(令和4年4月1日-令和4年6月30日) ナカバヤシ株式会社 S100OV58 四半期報告書-第51期第1四半期(令和4年4月1日-令和4年6月30日) 株式会社DTS (以下省略) 今度は任意のドキュメント取得をしてみます。

Hero Image
抽象クラスをつくる

動機 折角クラスが使えるので、どこまでデザインパターンを充足できるのかという試み。 PowerShellによる抽象クラスの作成 最近までこれは不可能だと勝手に思っていたのですが、近しいことはできそうなのでここで試して見ます。 参考として、 結城浩さん著の『増補改訂版 Java言語で学ぶデザインパターン入門』より Template Methodパターンの例をPowerShellで実装してみましょう。 Template Methodパターン 最終的にはこんな感じになります。 IncompleteDisplayクラスは比較のために不完全な実装によってちゃんと実体化できないクラスをあえて記述します classDiagram AbstractDisplay <|-- CharDisplay : Inheritance AbstractDisplay <|-- StringDisplay : Inheritance AbstractDisplay <|-- IncompleteDisplay : × 期待する動きとしては、 CharDisplayでは文字をうけとったら«»で囲って5回文字を出力させます。(例では’H’) <<HHHHHH>> StringDisplayでは文字をうけとったら+-+と|で周囲を囲って中に5行入力された文字を出力させます。(例では’Hello!’) +------------+ |Hello World!| |Hello World!| |Hello World!| |Hello World!| |Hello World!| +------------+ そしてIncompleteDisplayでは文字をうけとったら+-+と|で周囲を囲って中に5行入力された文字を出力させようとしますが実装が足りないため異常を発生させます。 抽象クラスをつくる classDiagram class AbstractDisplay{ open() print() close() display() } class AbstractDisplay { AbstractDisplay() { $type = $this.GetType() if ($type -eq [AbstractDisplay]) { throw("$type は 継承して利用してください") } } #抽象メソッド1 -> サブクラスに実装を任せる抽象メソッド hidden [void] open() { throw("オーバーライドしてください。") } #抽象メソッド2 -> サブクラスに実装を任せる抽象メソッド hidden [void] print() { throw("オーバーライドしてください。") } #抽象メソッド3 -> サブクラスに実装を任せる抽象メソッド hidden [void] close() { throw("オーバーライドしてください。") } #ここで実装する [void] display() { $this.

Hero Image
Pesterについて

Pesterについて Pesterとは何か 基本の使い方 テスト対象を取得してくる テスト項目記述部分 テストの実施 実際に使ってみた Pesterについて Pesterとは何か PowerShell向けのテストフレームワーク 参考:https://pester.dev/ これのおかげでpowershellのテストコードを書いて単体テストをきっちりできるよ。 今はv5が最新だと思われる。 Install-Module Pester -Force でインストールできる。 テストしたいXXX.ps1というスクリプトに対して XXX.Tests.ps1というテストスクリプトを用意してあげる。 手で用意してあげてもいいけど New-Fixture -Name XXXでカレントディレクトリにテンプレ付きの上記セットができあがる。 基本の使い方 大まかにはテスト対象を取得してくる部分とその下に続くテスト項目の部分とに分けられる。 テスト対象を取得してくる v5では以下のように実行するテストスクリプトのパスを書き換えて読み込んでくる。 テンプレではテストスクリプトと同じカレントディレクトリにテスト対象になるスクリプトがある想定らしいが、テストファイルファイル同士別ディレクトリにまとめてたりで都合が悪い場合は適宜リプレースする部分を変えてやるといいみたい。 BeforeAll { . $PSCommandPath.Replace('XXX.Tests.ps1', 'XXX.ps1') } テスト項目記述部分 こんな感じで階層化して整理して記述できる。 Contextは大きなまとまりってかんじかな。 Itはテスト一項目。って認識。 観点や単位ごとに分けると良いかなと感じた。 Describe > Context > It こんな感じで Describe "XXXFunctionTest"{ Context "正常系" { It "境界値 min"{ } It "境界値 max"{ } } Context "異常系" { It "境界値 min -1"{ } It "境界値 max + 1"{ } } Context "例外テスト" { It "数値以外"{ } It "null"{ } } } 又、それぞれBefore・After処理を行って前処理や後処理をIt実行ごととかテスト開始時とかに行える。

Hero Image
PowerShellと文字コード

1. PowerShellと文字コード 1.1. PowerShellで文字列を扱うときは文字コードに気を付ける 1.2. 知らなかったはまりポイント 1.2.1. PowerShellの内部のデフォ出力はUTF16LE 1.2.2. バイナリダンプの方法 1.2.3. どうしてこうなった 1.2.4. powershellv5での対処法 1.2.5. PowerShell Core入れるのが良き 1. PowerShellと文字コード PowerShellは直感的に動かせて嫌いではないけれど 思いもよらぬところに地雷があったりでつらい。 自分が知識なさすぎなのでさらにきつい 1.1. PowerShellで文字列を扱うときは文字コードに気を付ける PowerShellで内部で宣言した文字列を適当にテキストファイルとかにリダイレクトしたら UTF8だと思ってたらUTF16LEだったりとなかなかこれが把握してないとはまりポイントだった。 色々調べて解ったこととかを自分なりにまとめておく。 でも文字コードの深いところは深淵すぎて限度があった… 1.2. 知らなかったはまりポイント 1.2.1. PowerShellの内部のデフォ出力はUTF16LE 先ず、 任意の位置にテキストファイルを用意して中に “moji"と記載しておく。 この時、 テキストファイルの文字コードはUTF8であることを確認しておく。 ここではカレントディレクトリに"TXT.txt"を用意してみた。 次に、 こんな感じで文字列をPowerShell内部で生成してみる。 $str = "moji" そしてこいつを以下コマンドでリダイレクトする。 $str >> .\TXT.txt ほんでTXT.txtを開いてみる start .\TXT.txt こうなった moji -> m o j i これには UTF8と思ってたんで… 直接の理由はPowerShell内部ではデフォ出力がUTF16LEだかららしい。 特に指定せずにリダイレクトするとUTF16LEとして送られる。 1.2.2. バイナリダンプの方法 [検証するもの] | Format-Hex って感じで可能 なので検証してみる。 Get-Content .

Hero Image
springInitializrとは

SpringInitializrってすごいね SpringBootの便利なしくみの一つ。 SpringInitializr について。 SpringInitializrってすごいね 1.1. 結論 1.2. 詳細 1.3. 課題 1.4. 参考資料 1.1. 結論 SpringInitializrはprojectのひな形作成のためのWebサービス。 spring initializr (自分はずっと各IDEが提供している便利機能だと思ってた… それでもprojectは構築できるけど本質ではないから理解としてはダメ) これを利用することで、素早く簡単に必要最低限の設定が施されたひな形を zipやコピペ可能な状態での取得ができる。 1.2. 詳細 上記リンクにアクセス Project選択(Maven Or Gradle) Language選択 Spring Boot のバージョン選択 Projet Metadata にpackage名やJava のバージョンなどを記入・選択 Dependenciesを選択する ADD DEPENDENCIES…から選択可能 EXPLORE押下で最終的なディレクトリ構造を展開して確認可能(ここで必要な部分をコピペしてきてもOK) GENERATE押下でzipとしてダウンロード 開発環境に展開 1.3. 課題・感想 今までSpringを体系的に理解してこなかったのでこういう存在にも疎かった… 物事の体系的理解や横断的な把握は理解の指標としてとても大切だと感じた 資料を頭から理解しようとするのはつらいし遠回りだったりするけど 全体を把握したりするためにも一度体系だった資料に触れるべきだと悟った。 1.4. 参考資料 Spring徹底入門