Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

最近作ったもの

最近作ったものを紹介

  • Be the first to comment

  • Be the first to like this

最近作ったもの

  1. 1. 最近作ったもの 2021-04-08 社内勉強会 onozaty
  2. 2. 趣味で書くコード • 適当な課題を見つけてコードを書いている • 思いついたことはTODOリストに入れておいて、やることなくなったら TODOリストから次の課題を探す感じ • 作った時点では仕事で使うと思っていないようなものでも、後から 仕事で使ったり、知識が役立ったりということも多々あり • 先日もAnsibleではまっていたメンバに、趣味で書いたAnsibleのコードを参 考にして解決してもらった
  3. 3. 最近の状況 在宅勤務になってから、通勤時間(往復で4時間近く)が無くなったこと もあって、コードを書ける時間が増えた。 ※コードだけじゃなく、勉強会のスライドやZennの記事もprivateリポジトリで 管理していて、上記contributionsに含まれている。 逆にIssueのやりとりは含まれない。
  4. 4. 最近新たに作ったものを 新しいものから順番に紹介 ※完成していないもの&紹介する価値もなさそうなものは省略
  5. 5. filist
  6. 6. filist 指定したディレクトリ配下のファイル情報を、サブディレクトリも対 象にして再帰的に表示するCLIツール。 • 既存コマンドの組み合わせでも出来るが、コマンド1つで書けると もっと楽だなと思って作った URL https://github.com/onozaty/filist 作成時期 2021年3月 言語等 Go $ filist -s -M . a.txt 24 3d3a42d900823afcfdfeb6de338bcec1 b/1.txt 81 ae23e0b40e773ac132f477f661e89b86 b/2.txt 163 494ba81d0d828ff9a244da627b5ece47
  7. 7. filist • ファイルパス以外にも、ファイルサイズ、更新日時、ハッシュな どの情報を一緒に出力できる $ filist -h Usage: filist [options] directory ... options -r, --rel Print relative path (If neither 'rel' nor 'abs' is specified, 'rel' will be printed first column.) -a, --abs Print absolute path -s, --size Print file size -m, --mtime Print modification time -M, --md5 Print MD5 hash -S, --sha1 Print SHA-1 hash --sha256 Print SHA-256 hash -h, --help Help
  8. 8. filist • オプションで指定した順に情報が並ぶので、各項目の表示順は自 由自在 $ filist -r -M . a.txt 3d3a42d900823afcfdfeb6de338bcec1 b/1.txt ae23e0b40e773ac132f477f661e89b86 b/2.txt 494ba81d0d828ff9a244da627b5ece47 $ filist -M -r . 3d3a42d900823afcfdfeb6de338bcec1 a.txt ae23e0b40e773ac132f477f661e89b86 b/1.txt 494ba81d0d828ff9a244da627b5ece47 b/2.txt
  9. 9. ちょっと脱線してGoの話
  10. 10. Go • 最近ちょっとしたツールはGoで書いてる • 仕事でGoは使ってないが、今後使うためにも • Goだとシングルバイナリ(1つの実行ファイル)で動くので、バイナ リの配布がとても簡単 • クロスコンパイルに対応していて、1つのソースコードから Windows、Mac、Linuxといった各種OS用のバイナリをビルドでき る • 各OS用のビルド環境は不要
  11. 11. Go • GoReleaserを使うと、各OS用のビルドとGitHabへのリリースも1コ マンドで完了するのでとても便利 • https://github.com/goreleaser/goreleaser
  12. 12. file-collector
  13. 13. file-collector ファイル収集のための雑多なツール類を整理していこうと思って作り 始めたプロジェクト。 • file-collector-download • URL一覧を元に、ファイルを並列でダウンロードするJavaのCLIツール • file-collector-github • GitHubでコード検索してヒットしたファイルをダウンロードするJavaの CLIツール URL https://github.com/onozaty/file-collector 作成時期 2021年3月 言語等 Java、Selenium
  14. 14. file-collector-github • GitHubには、様々なファイルが登録されている • GitHubのコード検索では、コード内容だけではなく、拡張子やファ イルサイズなどといった情報も条件として指定できる • 検索エンジン(GoogleやBingなど)では出来ないような、マイナーな拡張子 のファイルを探したり、特定のサイズのファイルを探したりといったこと ができる
  15. 15. file-collector-github • とはいえ、検索した後に手作業でダウンロードは大変なので、 Seleniumを使って自動化 • APIだとGitHub全体に対しての検索はできないが、Web上だとGitHub全体 で検索できる&スクレイピング自体は禁止されていないので、Selenium 使ってURLをスクレイピング • リクエスト数などの制約はAPIと同じ(10件×100ページで合計1000件まで& 1分間に30リクエスト)
  16. 16. file-collector-github • 検索クエリと出力先を指定して実行 • Chromeが立ち上がり、GitHubのログインページで一旦停止するので、そこ で手動でログイン情報を入力する必要がある • ログインしないとコード検索自体出来ないのでやもえず $ java -jar build/libs/file-collector-github-all.jar -q "extension:pdf filename:test5" -o output 23:59:40.552 [main] INFO GitHubFileCollector - Search started. The number of queries is 1. 23:59:42.286 [main] INFO GitHubWebSearcher - (1/1) [extension:pdf filename:test5] Started. 00:01:36.162 [main] INFO GitHubWebSearcher - (1/1) Finished. The number of URLs was 423. 00:01:36.820 [main] INFO GitHubFileCollector - Search finished. The number of total URLs is 393. 00:01:36.830 [main] INFO GitHubFileCollector - Download started. 00:02:10.120 [main] INFO GitHubFileCollector - Download finished. The number of files successfully downloaded was 393.
  17. 17. mvndl
  18. 18. mvndl インターネット上のMavenリポジトリから、Mavenリポジトリのフォ ルダ構造のままファイルをダウンロードするCLIツール。 URL https://github.com/onozaty/mvndl 作成時期 2021年2月 言語等 Go $ mvndl -r jcenter -g com.github.onozaty -a postgresql-copy-helper -v 1.0.0 -d local-repo https://jcenter.bintray.com/com/github/onozaty/postgresql-copy-helper/1.0.0/postgresql-copy-helper-1.0.0.pom -> saved https://jcenter.bintray.com/com/github/onozaty/postgresql-copy-helper/1.0.0/postgresql-copy-helper-1.0.0.jar -> saved https://jcenter.bintray.com/com/github/onozaty/postgresql-copy-helper/1.0.0/postgresql-copy-helper-1.0.0-sources.jar -> saved https://jcenter.bintray.com/com/github/onozaty/postgresql-copy-helper/1.0.0/postgresql-copy-helper-1.0.0-javadoc.jar -> saved $ mvndl –h Usage of mvndl: -r, --repository string Maven repository ("jcenter" or "central" or Specify by url) -g, --group string Group ID -a, --artifact string Artifact ID -v, --version string Version -d, --dest string Destination directory for download files -h, --help Help ※Mavenリポジトリは、Javaのライブラリが登録されたリポジトリ。ビルドツールにおけるライブラリの取得と依存関係の解決に利用される。
  19. 19. mvndl • JCenterが2022年2月にシャットダウンされるといった発表があった ので、ローカルフォルダにMavenリポジトリを作るためのツールと して作ってみた • JCenterにしかないライブラリが、Maven Centralに移行せずにそのままイ ンターネット上から消えてしまうような事態になったとき、このツールを 使ってJCenterからダウンロードしてそのままローカルにMavenリポジトリ が作れるように • 詳しい使い方は下記記事で • 利用ライブラリをMavenリポジトリ形式でプロジェクト内のファイルとし て保持する(JCenterシャットダウンに向けて) https://zenn.dev/onozaty/articles/java-local-maven-repository
  20. 20. createfile
  21. 21. createfile 指定サイズのファイルを作成するCLIツール。 • テキストかバイナリで中身のパターンを指定できる • 大きなファイル作りたい時とかに URL https://github.com/onozaty/createfile 作成時期 2020年12月 言語等 Go $ createfile -t abc -s 1GB -o 1gb.txt $ createfile -b 616263 -s 1GB -o 1gb.txt $ createfile -h Usage of createfile: -t, --text string text pattern -b, --binary string binary pattern -s, --size string size -o, --output string output file path -h, --help Help
  22. 22. createfile ◆0x00で埋められた1GBのファイルを作る ◆0-9の数字の繰り返しで16バイトのテキストファイルを作る $ createfile -b 00 -s 1GB -o null.dat $ ls -lh null.dat -rw-r--r--. 1 root root 1.0G Apr 1 14:50 null.dat $ hexdump null.dat 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * $ createfile -t 0123456789 -s 16 -o 16.txt $ ls -lh 16.txt -rw-r--r--. 1 root root 16 Apr 1 15:04 16.txt $ cat 16.txt 0123456789012345
  23. 23. Redmine issue assign notice plugin
  24. 24. Redmine issue assign notice plugin チケットの担当者が変わったときに、SlackやTeams、Rocket.Chatなど に通知するRedmineプラグイン。 • 担当者になったことに、すぐに気づけるようにしたくて作った URL https://github.com/onozaty/redmine_issue_assign_notice 作成時期 2020年12月 言語等 Ruby
  25. 25. Redmine issue assign notice plugin • チケットの担当者が変わった時に、下記のような内容の投稿をして くれる • 1行目: 担当者変更に関する情報 • 2行目: プロジェクト名、トラッカー、チケット番号、題名、ステータス • トラッカー+チケット番号はリンクになっている • 3行目: チケット新規作成時は説明、チケット変更時は注記(先頭200文字ま で)
  26. 26. Redmine issue assign notice plugin • メンションも飛ばせる • 自分自身を担当にした際にはメンションは飛ばないようにしている • 自分で変更したということは、既に知っていることなので • TeamsはIncoming Webhookでメンションに対応していないのでメンショ ンできない • メンション用のIDはユーザのカスタム フィールドとして設定
  27. 27. Redmine issue assign notice plugin • RedmineのIssueが作成/変更されたら通知するようなプラグインは 他にもあるが、担当者が変更になった時だけわかれば十分 • 他の情報も流れると、情報量が多くなりすぎて逆に埋もれてしまいかねな い • そのチャンネルからの通知はメンションのみにしておけば、自分が 担当になった時だけ通知が来るようになる • チケットの担当者を切り替えながら進めていくようなプロジェクト においては、とても役に立つプラグイン
  28. 28. dirweb
  29. 29. dirweb ディレクトリをWebサーバとして公開するCLIツール。 • ローカルで手軽に起動できるWebサーバとして • ブラウザでローカルファイルアクセス(file://)が許可されていなくて、 JavaScriptが動かないってときに URL https://github.com/onozaty/dirweb 作成時期 2020年10月 言語等 Go $ dirweb Listening... dir=./ port=3000 $ dirweb –h Usage of dirweb: -d, --dir string dir (default "./") -p, --port int port (default 3000) -h, --help help
  30. 30. ansible-redmine
  31. 31. ansible-redmine CentOS7にRedmineをインストールするためのAnsibleのPlaybook。 • 他の人が公開していたPlaybookを修正して使っていたが、自分用 として1から作り直してみた • プラグインのテストに使えるように、テスト用のDB作成なども行うよう にしている URL https://github.com/onozaty/ansible-redmine 作成時期 2020年10月 言語等 Ansible $ yum install -y epel-release $ yum install -y ansible git $ git clone https://github.com/onozaty/ansible-redmine.git $ cd ansible-redmine $ ansible-playbook -i hosts playbook.yml
  32. 32. ansible-redmine • これを使ってRedmineの各バージョンのVagrant boxを作って公開し ている • Vagrantインストール済みならば、コマンド2つで指定バージョンの Redmineが立ち上がる $ vagrant init onozaty/redmine-4.2 $ vagrant up
  33. 33. xml2csv
  34. 34. xml2csv XMLをCSVへ変換するCLIツール。 • マッピング情報をJSONで定義しておいて、その情報に基づいて XMLからCSVへ変換を行う URL https://github.com/onozaty/xml2csv 作成時期 2020年9月 言語等 Go $ xml2csv -i input.xml -m mapping.json -o output.csv $ xml2csv –h Usage of xml2csv: -i, --input string XML input file path or directory or url -m, --mapping string XML to CSV mapping file path or url -o, --output string CSV output file path -b, --bom CSV with BOM -h, --help Help
  35. 35. xml2csv • マッピングはXPathで記載(以下はRSSを変換する定義) • rowsPath で行として取得するXPathを記載 • columns で各列のヘッダ名と、値を取得するXPathを記載 { "rowsPath": "//item", "columns": [ { "header": "title", "valuePath": "/title“ }, { "header": "link", "valuePath": "/link“ }, { "header": "description", "valuePath": "/description“ } ] }
  36. 36. xml2csv <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>W3Schools Home Page</title> <link>https://www.w3schools.com</link> <description>Free web building tutorials</description> <item> <title>RSS Tutorial</title> <link>https://www.w3schools.com/xml/xml_rss.asp</link> <description>New RSS tutorial on W3Schools</description> </item> <item> <title>XML Tutorial</title> <link>https://www.w3schools.com/xml</link> <description>New XML tutorial on W3Schools</description> </item> </channel> title,link,description RSS Tutorial,https://www.w3schools.com/xml/xml_rss.asp,New RSS tutorial on W3Schools XML Tutorial,https://www.w3schools.com/xml,New XML tutorial on W3Schools xml2csv -i rss.xml -m rss.json -o rss.csv
  37. 37. 新しいバージョンをリリースしたもの
  38. 38. 新しいバージョンをリリースしたもの • Redmine view customize plugin https://github.com/onozaty/redmine-view-customize • Redmineの画面をJavaScript、CSSでカスタマイズするプラグイン • 過去1年間で3回の機能リリース、1回のバグフィックスを実施 • Redmine issue loader https://github.com/onozaty/redmine-issue-loader • CSVファイルに記載された情報を読み込んで、Redmineにチケットとして登 録、更新するツール • 2020年5月に機能リリース
  39. 39. 新しいバージョンをリリースしたもの • ShortcutKey2URL https://github.com/onozaty/firefox-shortcutkey2url https://github.com/onozaty/chrome-shortcutkey2url • ショートカットキーを使用してURLを開いたり、移動したり、JavaScriptを 実行できるChrome/Firefoxの拡張機能 • 2020年3月に機能リリース
  40. 40. おわりに
  41. 41. おわりに • 他の人にとって役に立つものがあったかどうか怪しいが、、もし役 に立ったり、使ったものがあったら、教えてもらえるととてもうれ しい • Slackの勉強会チャンネルとか • 直接言うの面倒ならばGitHubのStarとか • 使い方でわからないところだったり、こんなこと出来ないかなどと いった質問もぜひ • 社内だからこそ出来るフォローもあるはず

×