はじめに この記事は2020年のRevCommアドベントカレンダー20日目の記事です。 19日目は@metal-presidentさんの「モバイルチームの成長とKMM導入に向けて」でした。 11月に株式会社RevCommに入社した@rhoboroです。 前職では主にGCP x Pythonで、現職では主にAWS x Pythonで日々業務を行なっています。 RevCommでは広島県の尾道からフルリモートワークで働いているので、そういった働き方にもし興味があればこちらの記事もご覧ください。 それでは、本題に入ります。 PythonのAST(抽象構文木)とは? この記事は、PythonのAST(抽象構文木、Astract Syntax Tree)に触れたことのない方を対象にしたASTの入門記事です。 そもそもASTとは何なのか、ASTを理解すると何ができるのかを中心に紹介していきます。 さっそ
mypy は Python の型アノテーションを元に静的な型チェックを行うライブラリ。型推論を行い返り値の型などもチェックする。 Pythonではじまる、型のある世界 - Qiita mypyやっていくぞ - Qiita [翻訳] Python の静的型、すごい mypy! - Qiita 起動からアルゴリズム部分に到達するまで mypy コマンドは scripts/mypy が起動される main.py の main mypy.build.build が呼ばれる dispatch メソッドが色々やってそう 全体の流れ build.py の中にアルゴリズムや設計思想がテキストで説明してある dispatch は ① load_graph(source) して ② process_graph(graph) する load_graph Graph とは str->State の dict St
あたらしく自前のBlog https://aish.dev をつくりましたので、こちらはもう更新しないつもりです。 https://aish.dev は、自作のMiyadaiku というSSGを使い、Github actionを使ってGithub pagesで公開しています。 編集環境としては専用のJupyterLab環境を用意して、テキストを編集して保存すると自動的に確認用のページがビルドされ、編集が終わったらgit commit して git push すると公開される、というプログラマにはとてもフレンドリな環境になっています。giはJupyterLabの拡張モジュールから操作できますし、ブラウザ上のターミナルからも扱えます。 リモート環境ながらレスポンスは良好だし、Jupyter NotebookでBlogを書けるのがほんとに便利です。「fotolife記法」なんかの独自記法に悩まさ
Mercari Advent Calendar 2018 の16日目はメルペイ エキスパートチームの@tenntenn お送りします。 この記事では、Goの静的解析の新しいムーブメントであるgolang.org/x/tools/go/analysisを使ったモジュール化について解説したいと思います。 「静的解析は関係ないや」と思って、タイトルを見てブラウザのタブを閉じようと思ったかもしれませんが、ほとんどのGopherには無関係ではないと思いますので、ぐっと我慢してしばらく間お付き合いください。 静的解析のモジュール化とは Goにはgo vetやgolintなど静的解析ツールが多数あります。 静的解析ツールを用いることで、プログラムを実行せずにバグになりうる箇所を検出することができます。 実際に、コードレビューを行う際にCIで静的解析ツールを実行している方も多いかと思います。 Goは標準で
初めに Groovy とは? Groovy とは、Java プラットフォーム上で動く動的型付け言語です。シンタックスがほとんど Java と変わらないので、Java を動的型付けにした言語と考えてもらえば良いと思います。Groovy から Java のコードを呼び出せるので、既存のあらゆる Java のライブラリがそのまま使えます。 動的な側面だけでなく静的コンパイルもサポートされているのが Groovy の特徴です。静的コンパイルによって、動的な機能 (ダックタイピングや実行時のメソッド追加など) が制限される代わりに、動的なメソッド呼び出しに関するオーバヘッドがなくなるため、実行速度が Java と大差なくなります。 AST 変換とは? Groovy のソースコードをコンパイルすると、まず文法に則ってコードを木構造で表した中間表現に変換されます。これを 「AST (Abstract S
こんにちは、鈴木です。 20 万行を超えるアプリケーションのほとんど全てのソースコードを変更し、テストを行わずに本番リリースしました。 「それってテストいるんですか?」問題 いきなりですが質問です。ソースコードを 1 バイトでも変更したら再テストする必要はあるでしょうか。「絶対に再テストすべき」という方もいれば、「状況によるしケースバイケースかな・・」という方もいらっしゃると思います。 ケースバイケースと考える方は、どのような場合にテストを行わなくて良いと考えるでしょうか。例えば、コメント内の誤字を修正した場合はどうでしょうか。ローカル変数の名前を typo していたので修正した場合、デッドコードを削除した場合はどうでしょうか。 こんなことがありました ある日、Python のソースコードを眺めていると、「# $Id」のような CVS 時代のコメントがありました。いまやソースコードは Gi
Introduction The desire to bring macros to Python came from my experience with Rust's procedural macros, so we're going to talk about Rust for a second. If you'd like to skip ahead to the Python stuff, click here. Rust is becoming more and more popular by the day for reasons that you've probably heard about: It's really fast. It has a nice, modern type system. It prevents lots of memory errors. Ho
誰がこんなもん欲しがるって言うんだよォー!! クライアント側(JavaScriptとかだ)が明らかに困るだろ! 現状の確認 素直なコードとJSON 先のJSONは以下のようなコードで生成した。 package main import ( "encoding/json" "fmt" ) type Sample struct { Id int } func main() { data := Sample{1} bytes, err := json.Marshal(data) if err != nil { return } fmt.Println(string(bytes)) } Go言語がわからない人でもきっとなんとなく読めるだろう。 素直だ。わかりやすい。このコードが"Id"ではなく"id"というkeyでJSON生成してくれれば何も問題はなかったのに。 少し書くのがめんどいコードとJSON
Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。
はじめに こんにちは、Go界の骨盤職人です。buildersconにmattnさんがいらしていたということで生mattnさんに謁見したかったのですが、諸事情でこの日程はどうしても都合がつかず、参加できなかったことが非常に残念でいまでも悔やんでいます。 さて、Goは安定して開発が進んでおり、いまは安定バージョンが1.8にもなろうというところです。セルフホスティングも1.5で達成し、GCの高速化も順調に進んでいる中、いまだにGoの問題として挙げられるものとして「パッケージバージョンの管理」があります。今日はその辺の話をしようと思います。 TL;DR go パッケージを使って、自分たちが書いたコードが依存してるパッケージを明らかにし、依存先パッケージの更新に追従していこう。 前置き 以下の話はGoをプロダクションで中規模〜大規模に利用している環境を想定しており、細かな閉じられたパッケージのみを開
この記事は Go Advent Calendar 2015 5 日目の記事です。 はじめに Go にはジェネリクスがありませんが、任意の型に対して共通の処理を提供したいことがあります。 例えば ORM ライブラリで User テーブルと Blog テーブルを struct で表す場合を考えてみます。 type User struct { Id int64 Name string Email string } type Blog struct { Id int64 Title string Body string } この 2 つの struct に対して共通の処理、例えば id で検索して結果を返す FindById というメソッドを提供したいとします。 Go は静的型付き言語なので、複数の型を引数に取ったり、複数の型を返すといったメソッドを定義することはできません。 よって、それぞれの型
HTML の pre を折り返したい HTML の pre 要素を利用して表示させているときに、通常は長い行があっても折り返されない。 折り返したい場合は以下のようにする。 .wrap { white-space: pre-wrap; word-wrap: break-word; } gradle の detekt と detektMain の違い ./gradlew detekt では一件も検出されないが、detektMain だと検出されまくるという時がある。 一般的な checkstyle などのプラグインではcheckstyleMain は checkstyle をメインソースセットに対してだけ実行するという意味なので、checkstyleMain と checkstyleTest を足したものにだいたい等しいのだが、detekt の場合は違う。 detektMain/detekt
Deprehend is a tool that auto-generates go src to wrap goroutines with panic handlers and wrap http handlers for metrics tracking. Over at DeferPanic we do a lot of application monitoring specifically for you, Go engineers. Go as a language is very opinionated and more importantly, Go engineers are an anti-magic crowd. To this end, we have exposed most of our functionality as wrappers around the s
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く