テンプレート作成スクリプト

テンプレート作成スクリプト

ブログ記事にもしている、良いコード悪いコードで学ぶ設計入門(通称ミノ駆動本)の勉強会を2週間に1回のペースで開いています。

pythonista-books.connpass.com

2週間に1回のペースで実施しており、作成用のテンプレートも用意してもらっているのですが、「どこを修正すべきだっけ?」「漏れてない?」など確認しつつ、毎回作業を行う必要があるので楽できないかなーと思って作成しました。

github.com

最初はprintするだけでしたが、HackMDはファイルをインポートできるみたいなのでファイルに出力するようにしてみました。

困ったこと

めちゃくちゃ基本的だと思いますが、時刻計算をどうすれば良いのか分からなかったのでちょっと調べました。 結論、datetime, timedeltaを利用することで実施できました。 最初は日時だけで良いと思ってtimeを利用していましたが、それがちょっと難しそうだったので。

あとはチャプターの作成を楽にしたいなと思っていたのですが、ここはスプレッドシートを使うことでバッサリと諦めました。 本当はスクレイピングなどを実施するべきと思いつつ、まずは動く形にしてから実施すれば良いかなと。

学んだこと

  • ¥ではなく\をキーボード上で出力する方法
    • 改行コードを表す\nをテキスト中に含めないとPythonコード上で改行できなかったのでちょっとググったのは秘密です
  • Pythonの日付計算方法
    • 公式ドキュメントにパッと見、私がやりたいことが書いていなかったように見えたのでちょっと調べました。
  • pathlibの存在
    • こういうファイルパス系の操作はimport osで実施していましたが、公式ドキュメントを見ていたら何やら見つけました。できることは基本的に同じようですが、オブジェクト指向で操作できることが利点のようです。

改善したいこと

テキストの改行を\nで文字列中に入れていますが、テキストデータはシンプルにしておくだけが良いと思っているので何か良い方法があったら実施したい・・・

id:syou6162 さんから以下のアドバイスをいただきました。

pythonとかだとトリプルクオートとかですかね。shell scriptとかだとheredocsとかでググってみるといいと思います

トリプルクオート = docstringと完全に認識ミスをしており、 docstringではfstringを使えないということで駄目とばかり思っていました。。。 というわけで、改善したいことを改善できました。 アドバイスくださった id:syou6162 さん、ありがとうございます!

ミノ駆動本_読書py[1]参加メモ?

ミノ駆動本_読書py[1]参加メモ?

pythonista-books.connpass.com

こちらのイベントを引き続き共同主催しました。

主催者ではなく参加者の観点でも参考になることが多かったのでブログを書いておきます(以下、ですます調ではなくなりますがご了承ください)。

ガード節

処理の対象外となる条件をメソッドの先頭に定義する方法をガード節といいます。

良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方 仙塲大也 著 初版第1刷 P27, 28より引用。

コンストラクタ(Pythonの場合はinitが該当し、実際にはinitはイニシャライザではあるが)にそういう処理を書くことは無かった(気がする)のでなるほど、と勉強になった。

単純に初期化するだけのものとして捉えていたけど「こう言う概念があるのか!」と知ることができて良かった。

ガード節を使わない場合どうなるか考えたのだけど、値を入れた後にその値をチェックするロジックを別途作成して呼び出すことになると思っており、このケースの場合「他に使う人がそれを忘れる可能性がある」のかなと。そういう意味で誰がどう使っても大丈夫な、言葉が適切かはちょっとわからないがフールプルーフなクラス設計というのは大事だなと思った(こうした概念は結構全体的に通じているような気もする)。

Pythonでは@dataclassでfrozen=Trueをすることで不変にできそう(完璧ではないが)

@dataclassを使ったことが全然無かったが、共同主催者のにっきーさんが書いてくれたソース

github.com

object.setattr を使えば書き換えられるよね、という話があったが読書会の中で「よっぽどのことが無い限り使わないはず」それを利用する場合はそもそもの設計などがおかしいのでは?という話もあり、実際にはコードレビューあるいは静的解析ツールでカバーできるだろうかな気にしないで良さそうだな、という結論。 完璧に防ぐ方法がないじゃん!と思ってましたが、なんとでもなりそう感があって良かった。

カプセル化

クラスを使ったプログラミング?はちょっとずつ出来るようになってきたというか馴染んできたけど、オブジェクト指向とは、という話で出てくるカプセル化ってなんだっけなと忘れていた。以下自分の参加時のコメントを引用。

めっちゃ初歩的だけどカプセル化って、必要な手続き(メソッド)のみを外部へ公開すること…なんですね。:+1: :+1::+1: 外部へ公開すること… となると、なんだろう、パブリックなメソッドが1つ、インスタンスから呼び出して実行される物があって、そのほか公開しないものはプライベートにしておく、で良いのかな(うまくいえるような言えないような・コードが書けそうで書けなかったw):+1:

読書会の中で参考資料として教えてもらったリンクがとてもわかりやすかった。

qiita.com

カプセル化、必要なもの以外を隠すという意味でしっかり捉えることが出来て自分の場合はポケモンに出てくる「モンスターボールか」となった。 ポケモントレーナーがボタンを押すことでポケモンを出す・あるいはしまうことが出来るけど、使う側はどうなっているか知らなくて使えるので、そういうことかと。 例えばカプセルだったのでカプセル形状のモンスターボールでそのまま考えを巡らせたけど、身の回りのデバイスなども中身の実装は利用者である我々に隠されており、これもカプセル化かと学びが増えた。

終わり

いやー、ただ本を読むだけだとここまで学びにならなかっただろうし、とても勉強になりました。今まで自分もなんとなく気になっていたところを改めて教えてもらうことができて解像度が高まってよかったです。あとは手を動かしたい・・・

LTって何?

LTって何?

先日、会社でLT会を共同主催しました。 募集段階の時にLTについての資料があるとうれしいです、と言われたので説明用のスライドを準備するのにも加えて、ちょっと記事にもしてみます。

はじめにまとめ

LTとはライトニングトーク(Lightning Talk(s))の略で、短いプレゼンテーションです。 題材はイベントによって大きく異なります。PHP,Pythonなどプログラミング言語のTipsやおすすめの技術書だったり、インフラや目標設定だったり、とにかく色々なものについての発表がされています。

で、LTってどんなの?

概要が分かったとしても実際に資料など見たいですよね。 というわけで実際に私が発表してみたものを挙げてみます。

動画

www.youtube.com

スライド

docs.google.com 今回のブログ記事と一緒に見ていただくと良いかも? LTについて解説したLT用スライドです。

docs.google.com

先日のPython Tips LT会で発表したもの。

docs.google.com

動画のスライド。

docs.google.com

技術書のLTやった時のスライド。

なぜLTをやるのか?

そこにLTがあるから...

というのは半分冗談で、半分本当です。 自分が身につけた、あるいは身につけようとしているものをアウトプットすることで自分の学びになりますし、何より楽しいからやっています(正直なことを言うと、資料を準備するときは苦しいときも多いですけどね)。

自分が好きなものや、好きになったものを語っている時はとても楽しいですし、周りの人からの反応がもらえるとそれも励みになるし、学びに繋がることもあります!

他にメリットを挙げると、社外にも公開することで自分のことを知ってもらう資産にも繋がります(もちろん、一般に公開するものは機密情報などは含めてはダメですが)。 そういう訳で私は時折、LTを社外でも発表しています。

なぜLT会を開くのか?

個人的な体験談として、私が過去に勉強会(LT会)に参加してエンジニアとして育っていった(?)という経緯がありました。「勉強会っていうものがあるらしい」と初めて参加した勉強会でLTをされている方が居て「すごいなー」(小並感)と思っていたら「LTしませんか?」と尋ねられ。その時は発表しませんでしたが、いろんなイベントに参加してLTをやる方を見て「楽しそうだなー」と思うようになり、参加するようになりました。

普段の業務だけではLTという単語を聞くことは殆ど無いかと思いますが、「こういうものが世の中にあるんだ!」って知ってもらえるだけでも十分意味があるかな?と思っています。そこからどんどん外の世界にも出ていって、スキルアップや学びにつながれば最高だなと。

社内の交流の場にもなりますし、最初から社外で発表するハードルも高かったりするので、まずはどんなものか参加してみることで、一参加者(今回だと自社の皆さんの)世界を広げられると良いなという目論みがあります。

身につけないといけない技術スキル

身につけないといけない技術スキル

目標設定をするにあたり、キャリアスキルズを久しぶりに読んだ。 その中で取り上げられていることについて、何があるのか何をすべきなのか? 今年の目標としてやっていこうと思って記載。

CAREER SKILLS キャリアスキルズ ソフトウェア開発者の完全キャリアガイド 第1版 第1刷 著者 ジョン・ソンメズ 訳者 長尾 高弘 第3章 身につけないといけない技術スキル より抜粋

実に13個も記載されている。多いし自分がしっかりと理解できているのはどれ一つなさそうだ! なんてこった、というわけで余計に頑張らねばだと思いみていく。

金になるスキル

これはまぁ、必要なものがあるけどまずは金になるスキルを身につけましょうね、という話のようだ。なので記載はしたが、特にやるべきことはない。次からの項目についてしっかりやる。

ひとつのプログラミング言語

私の場合は決まっている。Pythonだ。JavaScriptを学んでフロントエンドの道を切り開きたい、という気持ちはあるが改めてPythonを深く学んでいこうと思う。Pythonで何となくコードは書ける・・・じゃなくて、なぜこう動くのか、こういった落とし穴があるのか、といったところを学んでいきたい。

コードの組み立て方

今の自分に足りていなさそうなのはまずはこれ。CODE COMPLETEが学べる参考書として挙げられているのでCODE COMPLETEを読むことにする(買ってはいるけど全然通して読めていない)。

オブジェクト指向設計

ずっと理解せずのまま使っているのでは?とも思っており。

アルゴリズムとデータ構造

個人的に苦手意識が強い分野。とはいえ自分がエンジニアとして働きたいので学ぶ。

  • 配列、ベクトル
  • 連結リスト
  • スタック
  • キュー(待ち行列
  • 木(ツリー)
  • ハッシュ
  • 集合

世界で闘うプログラミング力を鍛える本を挙げられているので、買って読む。 あとはTopCoderが挙げられているけど、AtCoderあたりを再開しようかと思っている。

開発プラットフォームと関連テクノロジー

これは学ぶのがちょっと難しそう。とはいえ自分の場合だとLAMP環境的な構成を意識して、Linuxだろうか。 Linuxの考え方とか、コマンドでちょっとできることとか。

フレームワーク、またはスタック

Djangoと一緒に使うライブラリ群かな。あるいはFastAPI、Flask? 簡単な個人開発で何かサクサクと作りたい。

データベースの基本的な知識

RDBだけでなく、ドキュメントデータベース?についても学ぶべきという話があった。

  • データベースの仕組み
  • データを読み出すための基本的なクエリーの実行方法
  • データの挿入、更新、削除の方法
  • データセットの結合方法
  • ORM?

データベースの仕組み、と言われるとちょっとアレだけどこの辺りは上がっているスキルの中で一番わかっている分野かもしれない。 とはいえ人にちゃんと説明できるかというと怪しいので、やっていきまっしょい。

ソースコントロールシステム

gitについて改めて学ぶときが来たようだ。 commit, pushはできてもfetch, merge, pullの操作であったり そもそもの仕組みを説明できないので。ぼんやりと分かっているけどうまくいえぬ・・・みたいな状態を脱しないと。

ビルドとデプロイ

とりあえずCI/CDの環境構成をやってみることが大事かな、ということでJenkinsやCircleCIだとか触っていきたい。 ちょっと違うかもだけどAnsibleもオススメされながら触れていないのでやってみる。

テスト

これも意外と理解できている範囲かもしれない。最初に「テスト」について考えたからだ。とはいえ自動化・受け入れテストといった観点はNGだしE2Eテストもざっくりと理解はしつつやっていないので記事を書く・触ってみる。

デバッグ

最初、詰まったなぁと。今ではだいぶわかるようになったけど、どうやっていくか?ということは大事っぽい。 記事にはできた記憶がないのでやる。

メソドロジー

アジャイル開発とは?改めて学んでいくかな。あとはスクラムとか?

終わり

いつものことながらだいぶ雑多に書いた。1つずつ少しずつやっていきたい。

勉強会を共同主催しました

勉強会を共同主催しました

昨日6/3に初めて勉強会を主催しました。

pythonista-books.connpass.com

主催した動機

ノリとテンションで全てははじまった・・・! nikkieさんという方のツイートを見て、自分も気になる!と思ったところから話がスタートしました。

twitter.com

その後、TwitterのDMを使いつつ日時決定やアレコレを決めて可能な範囲でお手伝いさせてもらって開くことができました。

勉強会を開くって何をするの?(してもらったの?)

結構あったので、自分が次に1人でやるとしたら?ということもあり挙げてみます。 (ほとんどやってもらったことばかりですが)

  • 開催日の決定
    • 何時から?
    • 何日?
    • 何時間?
  • 何を使う?
    • 今回は提案いただいた以下のツールで実施
    • HackMD
    • Discord
  • HackMDの事前準備
  • Discordの事前準備
    • チャンネルの作成
    • pollという投票ツールの作成
  • connpassのページ作成
    • 公開
  • 勉強会の開催前のスライド作成

自分が頭から抜けていたこと

どうやって進行していくか、進めていくかという観点がすっぽりと抜けていて、全てカバーしてもらいました。 タイマーを画面上に表示してくれることなど細かい配慮をしてもらってとても助かったな(全然検討がついてなかったな)と思いました。 あとはDiscordを全然使っていなかったのでどうやったら良いかな?と思うことも多かったです。

やってみて

おんぶに抱っこ状態でしたが、参加者の方ともわいわい話ができて学びがありました。 今まで勉強会って気楽に参加してましたが、裏側では色々と大変だよな、いつもスムーズに開いてくださっている勉強会主催者さんはすごいなと改めて実感しました。

まだ第2回、3回と予定はしていますので、もっと自分でも出来る箇所・お手伝いして勉強会をどんどん開催していきます!

Python Tips LT会 - vol.3 でLTしてきました

Python Tips LT会 - vol.3 でLTしてきました

次のイベントでLTをしてきました。 rakus.connpass.com

スライドはこちら。 speakerdeck.com

良かったこと

温かい反応をもらえた。自分よりレベルの高い人も知らなかった、ちょっとしたネタもあったみたいなのでそこに価値はあったなと。

ipythonというのが通常のPythonインタプリタより便利だそうで、これも発表したことで学ぶことができたので良かったです。

あとは未経験時代に毎月ラクスさんの勉強会へ参加しており。 司会の方が勉強会でもお世話になっていた方だったので、少しは成長したところを見せられたかな、という感じでした。

ネタを探すのにGWに苦労していましたが、また何かの機会でLTやっていきます(次はPythonらしく自動化とかスクレイピングとか、はたまたサードパーティライブラリやコードリーディングとかも面白そう)。

iPhone12 miniを買った

iPhone12 miniを買った

ここ半年くらい?使っていたiPhone7のバッテリー持ちが非常に悪い(お昼にはもう20%とか)になっていたので、普通に使えるうちに変えておきたいなーと思い新しくiPhone12 mini(128GB)を買った。

なぜiPhone12 miniを選んだのか?

一言で言うと価格のバランス。一括で購入して75,800円(税込)。 iPhoneSE(第3世代)でも良いかなと最初は思っていながら次の様な思考を経て。

  • ちょっと広角カメラ気になるなー
  • どうせなら最新のiPhone13にしようかな、画面も大きいし
  • あれ、10万円する・・・?(128GBで98,880円税込)
  • やっぱり高いのでminiにしよう(広角カメラついてるし)
  • iPhone13 miniが128GBで86,860円税込かー
  • カメラがちょっと良いのとバッテリー持ちが2h違うのか・・・
  • 1万円プラスして買おうかな
  • まぁでも1万円違うのって、冷静に考えるとちょっと差があるしバッテリーも13miniにしたところでいずれは持たなくなるやろ

って感じでした。正確には覚えていないけど2018年の6月末頃にiPhone7買っていたみたいで、約4年弱使ってたみたいでした。

変えてみてどうか

良いですね。。iPhone7で不便してないと思ってましたが、アプリが思いのほかサクサク動く様になり。電池持ちについては心許ないなと思いつつ、今までよりは(当たり前ですが)改善もされており買ってよかったなと(バッテリーについてはiPhone13 miniにした方が良かったんじゃね?と思いつつ)(でも13 miniにしたところで今度は「13の方がとか」とか思うんだろうな、なんて思うのでこれで一旦は開き直っていきたいです)。

あとはiPhoneの移行もサクサクスムーズだったので基本的にストレス無かったです。

詰まったこと

外にお散歩していたらアンテナが立っているものの、ネット通信ができていないことに気が付きました。

色々とググってみたところ、APN設定が必要でした。 https://support.ntt.com/personal/purpose/detail/pid2900000f6b/

以下の手順で新コース以外用(1日110MBの旧コースを利用している)を選びダウンロードすることで使える様になりました。 https://support.ntt.com/personal/purpose/detail/pid2900001i7x

あれから

移行系もだいぶスムーズだった。自社で使ってたGoogle AuthenticatorもQRコード読み取りでサクッといけたし、LINEもすぐに移行できた。 SBIのアプリが認証必要だったのがちょっと焦ったかなーという感じ。 FaceIDはみんなが言うより使いやすいしハイテクだな(小並感)と思った。Apple Watch買っているのでそれで結構解除できているのもありスムーズに感じているのかもしれないけど。