サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
tenntenn.dev
はじめに 新しいことをいくつか始めようと思うので、ご紹介します。 tenntenn Conference 2023を開催します! なんだ、去年もやったじゃんと思ったかもしれません。 tenntenn Conferenceは、1人で運営し、1人ですべてのセッションをこなす狂気のカンファレンスですが、今年はスポンサーを募集しようと思ってます。個人カンファレンスで、スポンサーって新しいですね。 しかも、スポンサーセッションもやります(やりたいです)。何を言ってるのか分からないという方は、connpassページに掲載してある、スポンサー資料を御覧ください。 個人スポンサーもあるので、ぜひご応募ください! 有料の講義を開催します 有償の講義は企業向けなどがほとんどでしたが、10月と11月に時間があるため、個人向けの有償の講義を行う予定です。 内容はGoのテストです。詳しい内容や申込みについては、co
昨日は1日休みをとって、親戚の高専の情報科に通う学生にソフトウェアエンジニアについて以下のようなことを話をしました。 自分の将来について考える大切さ 情報を得ることの重要性 ソフトウェアエンジニアとはどういう職業か プログラミングの楽しさ 大学への進学について 私が経験したことや知ってることをなるべくバイアスが掛からないように伝えるよう心がけたつもりです。どのくらい上手く伝えられたかは分かりませんが、熱心に聞いてくれました。 当日用いた資料は一部を覗いて一般的な内容なので以下のURLから公開しています。内容で間違ってる部分があったらDMなどで教えていただけると嬉しいです。また、親戚のおじさんから親戚の学生へのアドバイスのための資料だという視点で暖かく見てもらえると助かります。 https://tenn.in/forstudents もし、高校や高専、大学などで似たような話をしてほしいという
はじめに 企業と技術コミュニティ(ここでは主にソフトウェアエンジニアによるもの)との関わり方について最近考えることが多かったので、私個人が大切にしていることについてまとめたいと思います。なお、この記事に書いてあることは、あくまで@tenntenn個人が大切だと思っていることです。所属する企業や運営する技術コミュニティやカンファレンスの総意ではないことに注意してください。 企業が技術コミュニティ支援する理由 まずはじめに、企業が技術コミュニティを支援する理由について考えてみましょう。企業によってさまざまだと思いますが、以下のような理由が多いでしょう。 技術領域自体の発展 技術コミュニティの発展 自社のエンジニア採用 どれも密接に関係しているため、切り離せるものではありません。技術領域が発展しないと、言語やライブラリの機能追加などが思うように行われないでしょうし、技術コミュニティが発展しないと
5年が経ちました 2016年9月1日にメルカリ(ソウゾウ)に入社して、5年が経ちました。 あ。。。Go年が経ちました。 現在の所属はメルペイのエキスパートチームです。入社して2回マネージャが変わりましたが、チーム自体は同じです。メルカリグループにいて、ずっと同じチームなのはかなり稀有な存在じゃないかと思います。 最近やってることは最近Merpay Tech Festでお話したとおり、相変わらずGoコミュニティでワイワイする仕事をしています。Go Conference 2021 Autumnも楽しみですね。そういえば、Google Developers Expert (Go)としても活動しています。 Gopher道場も自習室という取り組みも行っており、Slackの参加者も2000名を超えました。最近は昇段審査という取り組みも行っており、Goで仕事をする人が増えるといいなと思って活動しています
pkg.go.devへの移行 これまでGoでは標準パッケージのドキュメントはgolang.org/pkgから閲覧できました。また、サードパーティ製のパッケージは、godoc.orgで閲覧できました。Goはソースコードにすべての依存関係をインポートパスとして記述します。そのため、インポートパスさえあれば簡単にパッケージドキュメントが生成でき、https://godoc.org/github.com/tenntenn/greetingのようなURLをブラウザで開くだけで閲覧が可能でした。 godoc.orgの存在によってREADMEにパッケージドキュメントへのリンクを貼るだけで済むようになりました。簡単にドキュメントが生成できるため、ソースコードにドキュメントコメント書く文化の浸透にも寄与したのかなと思います。 Go Modulesが登場し、パッケージを束ね、バージョン管理をする単位としてモジ
はじめに time.Now関数を用いたコードをテストする場合、テスト対象のコードに次のような変更を加える必要があります。 引数に現在時刻を渡す パッケージ変数やフィールドなどに現在時刻を返す関数やインタフェースを設定する context.WithValue関数でコンテキストに現在時刻を設ける どの方法を用いてもプロジェクトの初期から考慮する必要があります。途中で変更するとなると修正が箇所を漏れなく探し出す必要があります。また、パッケージ変数に現在時刻を返す関数を設定した場合、テストを並列に実行することを諦める必要が出てくるでしょう。 このような課題を解決するために、testtimeというライブラリを作成しました。 テストの並列実行と時刻の固定 次のようにパッケージ変数を使ってtime.Now関数のラッパーの挙動を変えてテストする手法があります。 var nowFunc func() tim
複数バージョンの処理系を混在させるために、○○env系のツールが広く普及している言語はたくさんあります。しかし、すべての言語で必ずしも必要であるわけではないと筆者は考えています。いままで使っていた言語で○○env系のツールを使っていたため、特に深く考えずに他の言語でも利用しているということはあるでしょう。 Goでも○○env系のツールはいくつか存在します。しかし、筆者はGoにおいて複数バージョンのツールチェイン(コンパイラや標準ライブラリ)を混在させる必要があるのは稀でしょう。また、混在させる必要あったとしても公式で方法を提供しているため○○env系のツールは不要です。 むしろ、goenvを使っていてうまく動かない。PATHの設定がうまくいかないなどのトラブルをよく見かけます。(そんな方が検索に引っ掛けてくれることを祈っています)。 Goの後方互換性 Goはv1.0をリリースした際に、後方
なぜWebフレームワークが必要とするのか Webフレームワークを使った開発が当たり前であるプログラミング言語はたくさんあります。GoはどちらかというとWebフレームワークはいらないんじゃない?と言われることが多く、そう言われると初学者はいきなり難しいことをさせるなと思うかもしれません。 確かにフレームワークがあることでWebアプリが作りやすくなることがあるかもしれません。テンプレート通りに作れば作りたいものができるという体験はプログラミング言語を学び始めたばかりであれば重要です。フレームワークの枠に収まる開発であれば効果を発揮します。 しかし、「GoでオススメのWebフレームワークはありますか?」って聞かれる場合の多くは、Webアプリはフレームワークがないと開発できない、またはそうするのが当然だと思って質問している場合も多く見かけます。○○env系のツールと同様に、特に理由は無いけどそうい
GraphQLの静的解析ライブラリgqlanalysis 副業をしているAppify TechnologiesにてGraphQLの静的解析ツールをGoで書けるライブラリgqlanalysisを作りました。またそれに合わせクエリのセレクションにidの追加忘れを指摘するlackidとgqlgoオーガナイゼーションで開発した静的解析ツールをまとめて実行できるgqlintも公開されています。 gqlanalysisを用いるとGraphQLのスキーマやクエリファイルに対するLinterを簡単に作ることができます。gqlanalysisはGoの静的解析ツールライブラリのgo/analysisに似た構造で作ってあります。 go/analysisと同様にAnalyzerという単位で解析を行います。Analyzerは別のAnalyzerの解析結果を用いることができるため、静的解析ツールをモジュール化できます
Takuya Ueda is one of organizer of Go Conference in Japan. He is Google Developer Expert (Go). He works for the growth of the Go community in Japan. He also loves the Go Gopher and drawing Gopher illustrations.
はじめに 先日、Goの公式ブログにてジェネリクス(型パラメタ)が正式なプロポーザルとして提案されたとアナウンスがありました。ブログによると、プロポーザルが承認された場合には、今年の年末にはGo 1.18のベータ版の一部として試せるものが出てくる可能性があるとのことです。 細かな仕様については、以前から公開されているDraft Designを読むか、私の年末のブログを確認してください。この記事では、プロポーザルで提案されているインタフェースの変更が今後拡張された場合にどのような応用ができるのか考察していきます。そのため、プロポーザルで提案された機能がリリースされたとしても、ここで考察している内容が実装出来る訳ではありません。ご注意ください。 型リストを持つインタフェース プロポーザルでは、以下のようにインタフェースに型リストを記述することが出来るようになりました。 type addable
この記事は、Go Advent Calendar 2020の25日目の記事です。 なぜジェネリクスが必要なのか Goでは長年ジェネリクスを加えてほしいという要望が多く寄せられており、さまざまなデザインが検討されてきました。ジェネリクスの必要性は以下のようなコードを型に依存せずに記述することができます。 func PrintInts(s []int) { for _, v := range s { fmt.Print(v) } } func PrintStrings(s []string) { for _, v := range s { fmt.Print(v) } } Type Parameters - Draft Designで提案されているデザインでは、以下のように記述できるようになります。 func Print[T any](s []T) { for _, v := range s
登壇資料 エディタの壁を越えるGoの開発ツールの文化と作成法 at VimConf 2016 条件式評価器の実装による管理ツールの抽象化 at Go Conference 2017 Spring 静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話 at builderscon tokyo 2017 Goにおける静的解析と製品開発への応用 at ハッカーズチャンプルー2017 Static Analysis in Go at Golang UK Conference 2017 Goでかんたんソースコードの静的解析 at プロ生勉強会 第46回 粗探しをしてGoのコントリビューターになる方法 at Go1.8 Release Party goパッケージで型情報を用いたソースコード検索を実現する at Shinjuku.go#1 Go静的解析ハンズオン at 第6回Go
@tenntennです。 私の所属するメルカリ・メルペイでは、毎週金曜日にGo Fridayという社内勉強会を行っています。勉強会といっても発表資料を準備したり、担当者がいる訳ではありません。単にバックエンドエンジニアが集まり、技術の雑談をしているだけです。 Go本体や標準ライブラリについて、便利なライブラリ、自作ライブラリや自作コンパイラの紹介、Google Cloud Platformの話題、最近ハマった罠の共有などを行ってます。たまには多少脱線して技術文章の書き方、レイドボスの作り方、ネコちゃんの話などもします。 参加者の負荷を減らし気軽に参加できるようにするため話すことをあえて決めず、Google Docsに箇条書きで話すネタやリンクを貼り付けるだけにしています。参加者には私みたいに自分の話を聞いてほしいタイプもいれば、作業しながら聞いてる人もいます。雑談なので興味がある話にだけ首
この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。 はじめに この記事はGoアドベントカレンダーの1日目の記事です。 スライスの実態 runtimeのコードをみるとGoのスライスは以下のように定義されています。 type slice struct { array unsafe.Pointer len int cap int } reflectパッケージのSliceHeaderを見ても次のような定義になっています。 type SliceHeader struct { Data uintptr Len int Cap int } つまり、Goのスライスは次の図のように、配列へのポインタと長さと容量を持った値として表現されています。 runtimeとreflectパッケージでポインタがunsafe.Pointerとuintptrで表現方法は違いますが、ど
バックエンドエンジニアとして日々Goを書いている。Google Developer Expert (Go)。一般社団法人Gophers Japan代表。Go Conference主催者。大学時代にGoに出会い、それ以来のめり込む。人類をGopherにしたいと考え、Goの普及に取り組んでいる。複数社でGoに関する技術アドバイザーをしている。マスコットのGopherの絵を描くのも好き。
本稿はGo5 Advent Calendar 2019の25日目の記事です。 本稿で扱っている内容は今後変更される可能性があり、必ずしもGoのバージョンアップで取り込まれるというようなものではありません。 GopherCon 2019のIan Lance Taylor氏のGenerics in Goというセッションとその後公開されたDesign Docではコントラクトという機能が紹介/定義されています。 Design Docに登場したコントラクトは以下のように、型パラメタへの制約定義したものです。 contract C(P1, P2) { P1 m1(x P1) P2 m2(x P1) P2 P2 int, float64 } // コントラクトCを用いて関数fの型パラメタに制約をかけている func f(type P1, P2 C) (x P1, y P2) P2 { // (略) }
はじめに 本稿はGo Advent Calendar 2019の25日目の記事です。 筆者は静的解析が大好きでオリジナルの静的解析ツールを作ったり、静的解析ネタで登壇したりしています。 https://github.com/gostaticanalysis https://github.com/gcpug/zagane Mercari Advent Calendar 2018の“Goにおける静的解析のモジュール化について”という記事をで書いたように、Goの静的解析ツールは再利用性を考え、モジュール化する流れになっています。 本稿では静的解析のモジュール化における課題と今後のエコシステムを考察します。 静的解析のモジュール化 モジュール化は、静的解析ツールをgolang.org/x/tools/go/analysisパッケージ(以下、analysisパッケージ)のAnalyzer構造体の単位
Quoteを行う Goで文字列を""で括って(Quoteして)表示したい場合、fmt.Printf関数を用いて行うことが多いでしょう。 package main import "fmt" func main() { fmt.Printf(`"%s"`, "hoge") } これを実行すると以下のようになります。 $ go run main.go "hoge" 文字列中に"が含まれていた場合に、Goのソースコード上の文字列のようにエスケープする場合には%qが便利でしょう。 package main import "fmt" func main() { fmt.Printf("%[1]s %[1]q\n", "hoge") fmt.Printf("%[1]s %[1]q\n", `"fuga"`) } これを実行すると以下のようになります。 $ go run main.go hoge "hog
2016年9月にメルカリに入社してから3年がたちました。 所属はメルペイのエキスパートチームです。 3年間同じチームなのは社内ではめずらしい方ではないかなと思います。 エキスパートチームはこちらの記事にあるように「技術をアウトプットするところに技術は集まる」という言葉を大事にして活動しています。 3年前から変わらずGoに関する登壇やコミュニティ活動を中心に行っています。 3年前と変わってきたなと感じるのはGoを企業で採用する例が増え、 仕事としてもGoを用いて開発する人が増えた点かなと思います。 Goの需要が増えた分、Goエンジニアの採用もなかなか難しくなってきた印象もあります。 golang.tokyoなどを通じてGoエンジニアの採用について意見交換したり、 どうしたらGoのエンジニアが増えるのかを考えたりしています。 エキスパートチームの活動としても業界全体でGoエンジニアがどうやった
mattnさんと同様にGoogle Developer Expert (Go)になりました。 私がGoを触り始めたのは2010年くらいで大学の研究で作っていたコンピュータシミュレーションを行うためのプログラムで利用し始めたことがきっかけでした。 はじめのうちはGoについて周りで知っている方はほとんどいなかったので、オンラインのビデオチャットで数名と情報交換をしていました。 その後、ちょっとずつユーザや興味を持つ方が増え、2012年には名古屋や豊橋でGoの勉強会を行うようになりました。 そして、東京に引っ越し、Go Conferenceやgolang.tokyoなどのGoコミュニティを運営してきました。 東京のGoコミュニティがどんどん活発化し、東京以外でも福岡、大阪、仙台、岡山、沖縄など日本中で勉強会やコミュニティが活発になってきました。 現在では世界中でGoが利用されるようになり、いたる
このページを最初にブックマークしてみませんか?
『tenntenn.dev』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く