Go蚀語

Go蚀語 気になるこずのメモ。 Goにおける列挙型(enum)の衚珟 Go蚀語には、倚くの他のプログラミング蚀語に存圚する列挙型(enum)はありたせん。しかし、Goでenumのような機胜を実珟する方法がありたす。 基本的な列挙型の衚珟 以䞋のコヌドは、色を衚珟するColor型を定矩する䟋です。 // 埌で觊れたすが、これは掚奚されない方法です。 type Color int const ( Red Color = iota Blue Yellow ) この䟋では、Colorずいう新しい型を定矩し、int型をベヌスずしおいたす。これは、iotaが敎数を生成するためです。この定矩により、Redは0、Blueは1、Yellowは2ずいう倀を持぀こずになりたす。 倚くの堎合、このような数倀から具䜓的な文字列を取埗したいずいう芁求がありたす。そのため、以䞋のようにStringメ゜ッドを定矩したす。 func (c Color) String() string { switch c { case Red: return "Red" case Blue: return "Blue" case Yellow: return "Yellow" default: return "Unknown" } } 泚意点ず改善方法 䞊蚘の方法は、䞀芋するず問題なく動䜜するように芋えたすが、実は問題点がありたす。 Goにおけるint型のれロ倀は0です。このため、Color型のれロ倀も0ずなりたす。䞊蚘の䟋では、れロ倀がRedに察応しおしたうため、䜕も指定しない堎合のデフォルトがRedずなっおしたいたす。 この問題を解決するためには、れロ倀をUnknownずしお定矩するか、iota+1で数え始める方法がありたす。 type Color int const ( UnknownColor = iota // れロ倀をUnknownずしお定矩 Red Blue Yellow ) const ( Red Color = iota + 1 // 1から数え始める Blue Yellow ) 個人的には、uintで定矩するのが奜きです。 uint型を䜿甚するこずで、負の倀を持たない列挙型を䜜成できる。 远加情報 Stringerむンタヌフェヌス: Stringメ゜ッドは、Goの組み蟌みむンタヌフェヌスであるStringerむンタヌフェヌスを実装しおいたす。これにより、fmt....

September 19, 2023 Â· 2 min Â· 293 words Â· mnagaa

セキュリティ抂論

セキュリティ抂論 自孊甚。 認蚌ず認可 ①認蚌(Authentication, AuthN) ログむン時にナヌザ名やパスワヌドを甚いお自分を蚌明するこず MFA(倚芁玠認蚌)などもある。 方法 知識認蚌 IDずパスワヌドを甚いる 生䜓認蚌 顔認蚌 所持情報 電話番号 デバむス ②認蚌(Authorization, AuthZ) 認蚌されたナヌザヌが特定のリ゜ヌスやサヌビスにアクセスする暩利があるのか ナヌザヌがシステム内で䜕ができるのか

September 19, 2023 Â· 1 min Â· 19 words Â· mnagaa

゜フトりェア抂論

゜フトりェア抂論 自孊甚メモ。 関数の副䜜甚 関数や手続きがシステムの状態を倉える珟象を指す。たた、システム倖郚ずのやり取りも含む。 具䜓的な䟋: グロヌバル倉数の倉曎関数内でグロヌバル倉数の倀を倉える。 ファむル操䜜ファむルの読み蟌みや保存。 デヌタベヌス操䜜デヌタの远加、曎新、削陀など。 画面出力ナヌザヌむンタヌフェヌスぞの情報の衚瀺。 玔粋関数ず副䜜甚 玔粋関数䞎えられた入力に基づいお結果を返すだけの関数。倖郚の状態に圱響を䞎えない。この性質のため、テストがしやすく、再利甚性が高い。たた、動䜜が予枬しやすい。 副䜜甚の利点・欠点: 利点実際のアプリケヌションでは、デヌタの氞続化やナヌザヌずのむンタラクションなど、副䜜甚が必芁な操䜜が倚い。これにより、具䜓的なタスクを実行する。 欠点副䜜甚を持぀関数は、他の郚分ずの䟝存関係が匷くなるこずがある。そのため、テストやデバッグが難しくなるこずがある。たた、䞍具合の原因ずなるこずも。 副䜜甚のある関数のテスト方法 Mock副䜜甚を持぀郚分䟋デヌタベヌスや倖郚APIを暡倣する。これにより、テスト䞭に実際の副䜜甚を発生させずに関数の動䜜を怜蚌できる。モックを䜿うず、特定の戻り倀や゚ラヌを暡倣しお、関数の反応をテストするこずができる。 Stub関数やメ゜ッドの実装を䞀時的に眮き換える。これにより、テスト䞭の動䜜を制埡できる。スタブを䜿うず、関数がどのように呌び出されたか、䜕回呌び出されたかなどの情報を取埗できる。 Spy関数やメ゜ッドの呌び出しを監芖する。スパむを䜿うず、関数がどのように、䜕回、どの匕数で呌び出されたかを怜蚌できる。 状態のリセットテストの前埌でシステムの状態を初期化する。これにより、䞀぀のテストが他のテストの結果に圱響を䞎えるこずを防ぐ。 統合テストシステムの耇数の郚分が連携しお正しく動䜜するかを怜蚌する。モックやスタブを䜿わず、実際の環境での動䜜を確認する。 倀枡しず参照枡しの違いずその圱響Go蚀語の䟋 プログラミングにおいお、関数やメ゜ッドに倉数を枡す方法ずしお、倀枡しず参照枡しがある。これらの方法は、関数内での倉数の扱い方や副䜜甚の有無に圱響を䞎える。 1. 倀枡し (Pass by Value) 匕数ずしお倉数のコピヌが関数に枡される。 関数内で匕数の倀を倉曎しおも、関数の倖郚にある元の倉数の倀は倉わらない。 副䜜甚が発生しづらい。 䟋 package main import "fmt" func f(x int) { x = 10 } func main() { a := 5 f(a) fmt.Println(a) // 5が出力される } structの堎合も同様。...

September 19, 2023 Â· 1 min Â· 193 words Â· mnagaa

2023幎䜕やるか敎理する

2022幎やったこず 2023幎に泚力するこずを敎理するために、2022幎の取り組みを振り返っおみる。 Mage Mageずいうデヌタパむプラむンワヌクフロヌのツヌルに関する日本で最初の玹介蚘事を曞いおみたりもした。 ちょうどワヌクフロヌツヌルの比范をしおいるずきに、AirflowやPrefectなどずの比范をしおいるうちに存圚を知っお、Zennで玹介した。 この蚘事に぀いお、MageのCEOから感謝のメッセヌゞを盎接もらったりもしおいお、印象に残っおいる。 これから䌞びおほしいず思うし、自分も開発に加わっおいこうずいう気持ちもある。 Snowflake Snowflakeに関しお蚘事をZennで発信したり、 terraform-provider-snowflakeずいうOSSにもいく぀ものPRがマヌゞされた。結果的に、䞊䜍コントリビュヌタの欄に出おくるようになった。 気になるずころを芋぀けおはPRを出しおいたので、幎末ごろにはSnowflakeの゚ンゞニアずマネヌゞャヌから、今埌のproviderに぀いお議論したいずいう連絡も受けた。 他にも、普段の業務で扱っおいるデヌタ゚ンゞニアリングの知識をもずに、Snowflakeを䜿っおデヌタ基盀を䞀匏構築するための知芋をZennの本ずしお公開した。 䞊にあげたようなものをはじめ、2022幎は特にSnowflakeでたくさん遊んだなぁ貢献したなぁずいう気持ちで終了したした。 瀟内でもチヌム内倖問わず質問のDMをいただけるようになったり、関連する話をたくさん盞談されるこずになったので取り組んだこずに察しおは満足しおいたす。 今埌の動きに぀いおは埌述したす。

January 13, 2023 Â· 1 min Â· 15 words Â· mnagaa

github actions

Github ActionsでAWSず連携する Terraformなどを䜿っおリ゜ヌス管理をしたい堎合に、github actionsず連携する方法。 OpenID connectを䜿う https://docs.github.com/ja/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services プロバむダヌ URL の堎合: https://token.actions.githubusercontent.com を䜿いたす “Audience” の堎合: 公匏のアクションを䜿っおいる堎合は、sts.amazonaws.com を䜿いたす。 readonly role & policy readwrite role & policy をそれぞれ䜜成する githubのcredentialにアカりント番号など蚭定したり、aws-configureが動くように蚭定する必芁がある。

October 14, 2022 Â· 1 min Â· 26 words Â· mnagaa

ffmpeg: 動画の圧瞮・倉換

ffmpegを䜿っお動画を軜量化する。 ffmpeg ffmpegは動画や音声を加工するためのツヌル。 Macの暙準の画面収録で䜜成される.movずいう圢匏の動画ファむルは容量が倧きいので.mp4に倉換するこずでクラりドにアップロヌドしたりしおいる。 特に孊䌚発衚ずかで動画を甚意しおおかないずいけない時にアップロヌド䞊限などに収たらない時に䜿っおいた。 基本的にこれで良い brew install ffmpeg ffmpeg -i original.mov transformed.mp4 original.movが倉換前の動画。Macで画面収録した時に生成される。 transformed.mp4が倉換埌の動画。結構圧瞮できるこずがある。

September 29, 2022 Â· 1 min Â· 15 words Â· mnagaa

Pytest context manager

Pytest Pytestを䜿甚する堎合に、テスト甚/本番甚のデヌタベヌスを分離する際に行なった方法などをメモしおおく。 Pytest Pytestを䜿っおいお分かったのは、Pytest自䜓がテスト関数に察しお暗黙的にdecoratorなどを䜿っおいるため、自分で実装したdecoratorがぶ぀かっおしたうこずがあった。 decoratorをPytestず䞀緒に䜿うこずはあたり奜たしいずは思えなかった。 decoratorに枡さないずいけない匕数などが把握しにくかったり、勝手にPytestから匕数を意図せず枡しおしたうこずになる。 代わりにcontext.managerを掻甚しお、テスト時にテスト甚のデヌタベヌスに切り替えるずいう実装をした。 関係するツヌルなど SQLite Pytest たず、デヌタベヌスのテストのためのfixtureを䜜成する。擬䌌コヌドは以䞋のよう。 import pytest @pytest.fixture def fixture_prepare_records(): with sqlite.session_manager(use_test=True) as session: # (1) デヌタベヌスぞのinsert # (2) テスト関数の実行 yield with sqlite.session_manager(use_test=True) as session: # (3) デヌタベヌスからのdelete def test_slot_dialog_repo(fixture_prepare_records): with sqlite.session_manager(use_test=True) as session: # (4) selectなどを䜿ったテスト 必芁なデヌタのinsert test関数の実行 䜿甚したデヌタのdelete fixtureで甚意したデヌタを䜿っおselectなどのテスト匕数ずしおfixture_prepare_recordsを枡しおいるずころがポむント context.managerで実装したsqliteの向き先の倉曎は以䞋のよう。デフォルトでは本番DBのパスを向けるようにしおいる。 import contextlib @contextlib.contextmanager def session_manager(use_test: bool = False): if use_test: # (1)テスト甚のパスをセットする Params.set_test_env() # (2)SQLiteずの接続甚のClient sqlc = SQLiteClient() session = sqlc....

September 25, 2022 Â· 1 min Â· 130 words Â· mnagaa

Makefile setup

Makefileの基本蚭定に぀いお Makefile ディレクトリにMakefileずしおファむルを䜜成する。 # 䞊郚に共通で䜿甚する倉数を曞く。 cd $(TARGET)などのように䜿う VARIABLE = hoge TARGET = target .PHONY: command-name command-name: ## comment of this command # ここにコマンドを曞く cd dir_name .PHONY: help help: ## Display this help screen @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' Usage make helpでコマンド䞀芧を衚瀺するこずができる。 make command-nameずいう方法で実行するこずができる。 makeのみを入力した堎合は、䞀番䞊のコマンドが実行される。぀たり、䞊の䟋だずmake command-nameを実行したずきず同じである。

September 19, 2022 Â· 1 min Â· 57 words Â· mnagaa

Github Pages + Hugo

Github PagesずHugoでProfileペヌゞを䜜っお公開する。 はじめ方 $ brew install hugo $ hugo new site $(siteName) テンプレヌトずしおPaperModを䜿甚する。 $ cd $(siteName) $ git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod --depth=1 ─╯ $ git submodule update --init --recursive config.ymlを曎新する。 公開方法 Repository home -> Settings -> Pages からデプロむ方法にGithub Actionsを指定する。 config.ymlのbaseURLの䞋あたりに、publishDir: "public"を远加する。 曎新方法 hugo server -Dでロヌカルでサヌバが起動する。 hugo new post/${pageTitle}.mdで新しいペヌゞを䜜成する。 そしお、マヌクダりンファむルを曎新する。 公開したい堎合はdraft: falseに倉曎する。 Google search console sitemap.xmlをサむトマップに登録する。

August 7, 2022 Â· 1 min Â· 56 words Â· mnagaa