サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
blog.penginmura.tech
どうも、トビ(@tobi462)です。 今年もついに WWDC の季節がやってきてしまいましたね! そんなわけで去年の WWDC 21 を振り返ってみましょう!(え? Effective WWDC はじめに 全体的に Xcode Cloud Swift Concurrency Meet async/await in Swift Use async/await with URLSession Protect mutable state with Swift actors Meet AsyncSequence Explore structured concurrency in Swift Swift concurrency: Behind the scenes SF Symbols 3.0 What’s new in SF Symbols Explore the SF Symbols 3 ap
Tl;Dr まえがき Pulumi 3.0 のリリース Pulumi って? TypeScript による記述 設定値の管理 デプロイ時の差分確認 マルチステージなデプロイ おわりに P.S. Tl;Dr GCP の構成管理ツール(Infrastructure as Code)として Pulumi を導入してみた。 TypeScript でコード補完などの機能にたよりながら記述できるのは快適だった。 マルチステージで適用する必要があったが、コードで記述できるゆえにシンプルに対処できた。 Shell Script で1コマンドでインフラを構築できるようにした。 Pulumi はいいぞ。 まえがき 以前の記事で書いたように、最近 Crystal(と Ruby)でがんばるぞい bot を復活させました。 blog.penginmura.tech しかし、GCP の構成管理は行っておらず、GCP
Crystal 本体 VSCode 拡張:Crystal Language 静的解析ツール:ameba VSCode 拡張:Auto Add Brackets in String Interpolation VSCode 拡張:Auto Comment Blocks 標準で入ってるツール フォーマッター:crystal tool format テスト:crystal spec ドキュメント生成:crystal doc パッケージマネージャ:shards Playground REPL CI おまけ:Hello, world add メソッドの作成・テスト フォーマッタの確認 ameba の動作チェック ドキュメント生成 次のステップ おわりに P.S. Crystal 本体 Homebrew でインストールできる。 $ brew update $ brew install crystal
Tl;Dr それは何? 構成は? がんばるぞい bot の歴史 (興味がない方は読み飛ばしてください) ペンギン村 Slack では昔から がんばるぞい bot が稼働していました。 それは Slack bot と呼ぶには単純すぎるもので、「がんばるぞい!」や「がんばったぞい!」などと書き込むと、ランダムでキャラクターがメッセージを返答してくれるという、まぁがんばる人を応援しちゃうぜ的な bot でした。 そんな、がんばるぞい bot ですが実は2度もスクラッチで書き直されています。 初代: JavaScript / AWS Lambda もっとも初期のサービスは JavaScript / AWS Lambda で稼働させていました。 ちょうど Lambda や AWS Dash Button などが流行っていたので、とりあえずなんか作ってみようという発想で作られたのが始まりだった、と記憶
さて、前回は Haskell のリストや再帰処理などを見てきました。 今回はこれまで見てきたデータ型について軽く復習した上で、より詳細について見ていきます。 直積と直和 直積データ 直和データ 直積と直和の組み合わせ レコード構文 type / newtype データ型の宣言の意味 多相型 カインド Swift との用語比較 まとめ あとがき 直積と直和 Haskell では直積と直和のデータを扱えるのでした。 Swift では直積については構造体、直和については enum を使用して定義できますが、 Haskell ではどちらも data キーワードを使って定義します。 また値を取り出す際、Swift では直積についてはプロパティ、直和については switch (など)によるパターンマッチを使用しますが、Haskell では常にパターンマッチを使用してデータを取り出します。 直積データ
さて、前回は Swift の配列における典型的な操作(filter / map / reduce)について、Haskell の場合にどのように書けるのか見てきました。 今回は、リストの正体と再帰について見ていきます。 前回の訂正 リストの実体 リストを定義する Haskell のリストの実体 再帰的な関数 リストの再帰処理 リストのパターンマッチ 再帰的な型・関数が重要な理由 再帰的な考え方に慣れる length filter 練習問題 まとめ あとがき 前回の訂正 前回の記事で 1 add 2 という書き方を「セクション記法」と説明していましたが、 正しくは (+1) のように演算子を部分適用する書き方が「セクション記法」でした。(記事は修正済みです) blog.penginmura.tech リストの実体 さて、リストは配列と同じように、同じ型の連続した値を持つことができるデータ構造で
さて、前回は Haskell におけるデータ型の宣言やパターンマッチについて見てきました。 今回は Swift でよくある配列操作について、Haskell の場合にどのような書き方になるのか見ていきます。 リスト 関数と演算子 関数を演算子として使用する セクション記法(演算子の部分適用) 演算子 $ 関数合成 リスト処理を関数合成で書き直す どうやって読んだらいいの? まとめ あとがき リスト Swift で同じ型が繰り返すデータ構造として配列(Array)が用意されています。数値の配列から偶数のみを抜き取り、それを2倍して、それらの合計を計算するコードは、みんな大好きな filter 、map 、reduce を使って以下のように書けます。 let isOdd: (Int) -> Bool = { $0 % 2 == 0 } // 偶数か判定する関数 let xs: [Int] = [
さて、前回は関数の書き方やカリー化・部分適用などについて見てきました。 今回はデータ型の基本について見ていきたいと思います。 データ型の定義 直積型の定義 直和型の定義 関連値を持つ直和型 値の生成 値の生成 再帰的? パターンマッチ case-of スマートな書き方 どう読んだらいいの? まとめ あとがき データ型の定義 Swift では、直積型を構造体、直和型を enum で表現できます。データ構造という観点から見ると、この2つの概念があれば基本的にどんなデータでも表現できるでしょう。 Haskell では data キーワードで、直積型および直和型を定義できます。 直積型の定義 以下は Swift で 文字列 と数値 を組み合わた Person 型を定義したものです。 struct Person { let name: String let age: Int } Haskell では
さて、前回で Haskell の開発環境を構築できたので本編に入っていきたいと思います。 プログラミング言語の入門記事としては、基本データ型などから入るのがセオリーですが、そうした話題は大切ではあるものの同時に退屈でもあります。プログラマとしてある程度経験を積んでいれば、そうしたものはコードを読めば大体判断できますし、必要になってからあらためて理解すれば十分でしょう。 そのようなわけで、あえて関数から説明に入ってみたいと思います。 関数の基本 関数シグネチャの宣言 関数適用 where / let - in where vs let-in レイアウトルール ローカル関数 型注釈 if 式 ガード カリー化・部分適用 まとめ あとがき 関数の基本 Swift で足し算をする関数のコードは次のように書けます。 func add(x: Int, y: Int) -> Int { return x
さて、この記事では VSCode と stack を利用した Haskell の開発環境の構築を行っていきます。この環境構築を飛ばしても、次回以降の記事を読むのに支障はありませんが、コードを実行・評価できる環境が整っていると学習が捗るのでおすすめです。 概要 Stack のインストール VSCode拡張:Haskell のインストール implicit-hie のインストール / hie.yaml の自動生成 JetBrains Mono フォント(任意) おすすめの学習方法 REPL の活用 テストコードの活用 REPL の基本と設定 ヘルプ 代表的なコマンド 複数行の入力 プロンプト表示のカスタマイズ おわりに VSCode トラブルシューティング 補完やホバーが動かない なんかコード全体がエラー扱いに・・・ あとがき 概要 インストールする対象は以下のとおりです。 Stack VSC
Haskell は Swift に影響を与えたプログラミング言語として知られています。Swift に影響を与えたとされるプログラミング言語は他にも Objective-C、Rust、Ruby、Python、C# など多数に及びますが、プログラミングパラダイムに最も影響を与えているのは Haskell でないかと私は感じています。 この連載記事は、Swift と比較しながら Haskell を学んでいく記事です。 0. Introduction 1. 環境構築 2. 関数の基本 3. データ型の基本 4. リストと演算子と関数合成 5. リストと再帰 6. レコード構文と多相型とカインドと -- About this articles? readThisArticles :: SwiftProgrammer s => s -> HaskellerBeginner readThisArticl
SwiftPrettyPrint の 1.2.0 をリリースしました。 github.com 今回のリリースには、ターミナル統合(ANSIカラー)とマイナーな Bugfix が含まれています。 そもそも SwiftPrettyPrint って何ぞや、という方は前回の記事をご参考いただければ幸いです。 blog.penginmura.tech ターミナル統合(ANSIカラー) Xcode Plugin は衰退しました たったひとつの冴えたやり方? SwiftPrettyPrint は Xcode extension の夢を見るか? 2.0.0 への扉 おわりに P.S. ターミナル統合(ANSIカラー) 今回のバージョンから iOS Simulator または macOS で実行されている場合に、以下のファイルにコンソールと同様の内容が自動的に出力されるようになりました。 /tmp/Swif
どうも、まだ生き延びてる @tobi462 です。 swift-emmet という CLI ツールをリリースしたので、それの紹介的な記事です。 github.com ちなみに Haskell で書かれています。 それは何? シンプルな記法で構造体やクラスのコードを生成する CLI ツールです。 おまけ程度ですが REPL も備えています(ほんとにおまけレベルです)。 なんで作ったの? 業務アプリ(でなくとも)だと、多数のプロパティを持った構造体(やクラス)のコードを記述する機会は多いと思います。 そうした際、だいたい私は VSCode のマルチカーソルを使って雛形コードを書いて、それを Xcode に貼り付けるというフローをしていました(伝わりますかね?)。 ただ、それでも面倒に感じることが多かったので、Emmet インスパイアな CLI ツールを作ってみた次第です。 詳細は README
どうも、あんま元気ではないですが、まぁ何とか生きてる @tobi462 です。 いや、こんな出だしで大丈夫か?って感じもしますが、大丈夫だ。問題ない。ということで久しぶりに技術記事を書いてみます。 Tl;Dr ローカル関数とは? 引数を継承する関数呼び出し 転送用のローカル関数を定義する 部分適用された関数(Partial Application Function) まとめ Tl;Dr ローカル関数は、その関数内の変数をキャプチャする。 関数の引数をそのまま引き継いだ『部分適用された関数』を作りたいときなどに便利。 func foo(x: Int, y: Int) { func _bar(z: Int) { bar(x: x, y: y, z: z) // Capture `x` and `y` } _bar(z: 10) // => 13 _bar(z: 20) // => 23 _ba
先週、 SwiftPrettyPrint の 1.1.0 をリリースしました。このリリースには以下の2つのインテグレーションが含まれています。 LLDB Combine 本記事では、その2つの機能について解説したいと思います。 そもそも SwiftPrettyPrint って? LLDB 統合 Combine 統合 おわりに P.S. そもそも SwiftPrettyPrint って? SwiftPrettyPrint はその名の通り、Swift で pretty-print するためのデバッグ支援系のライブラリで、標準の print よりもスマートに出力することを目的としています。 github.com これは例を見たほうが早いかもしれません。例えば、以下は Dictionary を標準関数である print debugPrint dump でそれぞれ出力したものです。 let dict
この○○が金やちやほやされるために技術ブログを書いていると思っているのかァーッ!! 技術ブログを書いていることをアフェリエイト目的とか、PV目的だとか言われた時に。 なるほど完璧な開発プロセスっスねーーーっ不可能だという点に目をつぶればよぉ〜 一見完璧に聞こえるけど、どう考えたって上手く回らない開発プロセスの説明を受けた時に。 理解不能理解不能・・・あ、理解可能 ようやく理解できた時に。 お前は1つの修正が終わったらキチっとコミットしてから次の修正に入るだろう? 誰だってそーする。俺もそーする。 1コミットに全部の修正をぶちこもうとする奴へのあてつけに。 忘れっぽいならよォー……メモっておけよなぁー 几帳面によぉ~~ 忘れっぽい人に。 そんなもの、うちにはないよ 新しく入った人に仕様書ってどこですか?って聞かれた時に。 コードも見ておこう コードレビューは基本。 ソースヲ見ロォ〜 ドキュメ
どうも、休職中の @tobi462 です。 毎日仕事もせずに何をやっているかと言えば・・・そうですね、個人的推論に則った改善活動といったところでしょうか。 Bitrise の Xcode 11.3.x ビルドスタックの bundler が 1.x → 2.x に更新された 先週くらいに iOS 界隈を騒がせた小さな事件といえば、Bitrise の Xcode 11.3.x のビルドスタックのマイナーアップデートにおいて、bundler のバージョンが 1.x から 2.x に更新されたことでしょう。 Xcode 11.3 から Xcode 11.3.1 へのマイナーアップデートに関わらず、長らく bundler 1.x を利用し続けていた Bitrise が、このタイミングで bundler 2.x 系に更新したことは、Bitrise を利用している iOSアプリエンジニアの多くを混乱させ
はじめに お疲れ様です。かむいです。 この記事はiOS Advent Calendar 2019の17日目の投稿となります。 前回は@codelynxさんの名前付き UIView と後付けストアドプロパティもどきでした。 先月Firebase AuthenticationでSign in with Appleが利用できるとの発表がありました。 firebase.googleblog.com それまでは@fromkkさんが書かれていたようなCloud Functionsを利用したやり方でも近い仕組みを実現できていましたが、やはりFirebase Authentication単体で処理が実現できるのは嬉しい限りです。 qiita.com 今回はこのFirebase Authを利用した実装の紹介だけでなく、実装の中で登場するDelegateメソッドをRx化し、RxSwiftを利用しているケースを
どうも、最近は Dirty Androids の『Saturdays』ってアルバムがお気に入りの tobi462 です。 www.da-recording.com 広義には『HOUSE』あるいは『EDM』といった音楽ジャンルに当たるんでしょうか。個人的には『FUTURE BASS(フィーチャーベース)』っぽく感じる曲もあって、大変気に入っています。 製本版がリリース 以前の記事で『電子版』のリリースをお伝えしました。 blog.penginmura.tech そして、ついに『製本版』もリリースされ、私の手元にも届きました。 また、一般販売も近日中に開始されることが決定し、出資者以外でも購入することが出来るようになります。 いやはや、これで長かったこの仕事もようやく『完了』と言えそうです。 報酬の30%を『編集者』と『レビュアー』に分配 さて、『PEAKS』というクラウドファンディングで皆様
あ=阿良々木くん、羽=羽川(元)委員長 これは僕が『DDD』について学びながら、自分なりにアウトプットした話でありフィクションであり、まぁつまるところどうでもよい独り言だ。 どちらでも良いし、どちらでも悪いかもしれない。 唯一、正しいのはこれを書いているのが僕の『意思』をもった記録であるということだけだろう。 つばさドメイン 其の壹 あ「なぁ羽川。DDDって知ってるか?」 羽「ん、星のカービィに出てくる環境破壊が楽しい人のこと?」 あ「違う。それはデデデ大王だ。しかもアニメ版限定の話だぞ」 羽「あぁ、ドメイン駆動設計(Domein-Driven Design)のことね」 あ「そうそう。お前は本当になんでも知ってるな」 羽「何でもは知らないわよ。知ってることだけ。それで、なんでいきなりDDDの話なんて始めたの?」 あ「あぁ、実はプログラミングスクールに最近通い出したんだけど、そこの課題で『D
どうも、最近はRabi-Libiという弾幕アクションゲームをやっているtobi462です。 というわけで、PEAKSから『iOSテスト全書』の電子版が正式リリースされました。 peaks.cc おそらく製本版も今月中には発送されるかと思います。 (ところで一般販売はされるのでしょうか?私、気になります!) 追記:一般販売が開始されました! iOSテスト全書 著者: 松尾 和昭,細沼 祐介,田中 賢治,平田 敏之,玉城 信悟, 製本版,電子版 PEAKSで購入する そんなわけで、個人的にどういう想いを込めて執筆したのか、みたいなことを自分なりに振り返りながら書いてみたいと思います。 担当した章 私は著者陣の一人として、以下の章の執筆を担当させていただきました。 第2章:ユニットテスト(概要) 第4章:ユニットテスト(Quick / Nimble 編) 第5章:BDDによるアプリ開発 なお、第
かむいです。東京に台風15号が接近中です。雨風の音が凄い。。 iOSDC 2019に、今年も村から僕と@tobi462氏で参加してきました。 この光景を見るとiOSDCに来たなぁってなります iOS13から登場するダークモード仕様になってました 今年もCfPを幾つか投下したのですが、粉砕☆玉砕☆大喝采☆ そんなボツネタを来月弊社で開催するmeetupにて発表するので、ご都合がよろしければ是非遊びに来てください。 dmm.connpass.com 昨年参加した時にも書きましたが、普段カンファレンスでお会いする顔なじみの方、今回初めてお会いした方と、1年に1回この場で会える機会は本当に同窓会・文化祭の楽しさがありますね。 実行委員長の@tomzoh氏も話していましたが、iOSDC = コミュニケーションの場だなと強く感じさせられます。 今年の1セッションの時間は30分, 60分枠となり(LT除
この記事の目的 ビルド前の準備 メモリリークの検知 メモリリークの原因を特定する 原因を特定するときのTips メモリリークの修正方法 まとめ その他備考 この記事の目的 iOSアプリにおけるメモリリークの対処法を紹介します。 例えば、以下の画像のような、一見複雑な循環参照が原因のリークも簡単に直せるようになります。 ビルド前の準備 Edit SchemeでMalloc Stack LoggingをONにしておきます。 これで各クラスインスタンス生成時に実行されたコードを見ることができます。詳細は後述します。 「Edit Scheme」で「Malloc Stack Logging」をONにする メモリリークの検知 デバッグビルドしてから、アプリを操作*1した後に'Memory Graph'を開きます。 Memory Graphを開くボタン Xcode左端のDebug Navigatorを見
どうも、WWDC19に行ったついでにサンフランシスコで食べたカニの味が忘れられない @tobi462 です。 さて、そんなわけで今年も iOSDC の CfP を快適に検索できるサービス「このすばCfP」をリリースしました! iosdc19-cfps.penginmura.tech アニメでいうなら2期という感じでしょうか。 せっかくなので、軽く開発ストーリを記事にしてみたいと思います。 今年は必要ないかも? Flutter で作ろう 再始動 開発・リリース かむい shi より一言 おわりに 今年は必要ないかも? 去年、iOSDCに投稿されたプロポーザルを快適に検索・閲覧できるサービスが欲しい、という思いから通称「このすばCfP」をリリースしました。 しかし、正直なところ今年は開発すべきかどうか迷っていました。 というのも、公式のプロポーザル一覧の検索機能が向上したため、あえて情報源を増
どうも、最近は ウマ娘 プリティーダービー というアニメにハマっている @tobi462 です。 ちなみにセイウンスカイちゃんが一番好きです。 さて、すでに結構時間が経ってしまいましたが、try! Swift 2019 TOKYO で登壇してきたのでその感想的なブログ記事です。 www.tryswift.co speakerdeck.com LT採択から20分トークへ 今回、2日目の午後に20分トークで発表させていただいたのですが、実はもともとLTの予定でした。 ですが、当初予定していた20分トークのキャンセルがあったとのことで、運営から「20分で発表してみませんか?」という提案をいただき、せっかくの機会なので快諾させていただきました。 何を話すか(あるいは何を話さないか) もともとLTの予定で提出したCfPなので、最初はまさにライトニングトークというようなスピーディーな発表をしようと考え
どうも、 try! Swift 2019 TOKYO で登壇したのにいまだにブログを書いてない @tobi462 です。 今回はすごく久しぶりに勉強会に参加してきたのでそのレポートです。 yj-meetup.connpass.com Bonfire iOS は今回で5回目の開催で、今回は テスト がテーマということでした。 try! Swift でもProperty-based Testing / SwiftCheck で発表するくらい、テストの自動化に興味を持っているので、今回は絶対参加せねば・・・と思いブログ枠で参加させていただきました。 今回はキュレーターである @kumamo_tone さんのチョイスでYahoo!社内外のあわせて5名からの発表がありました。 テストは書かないと宣言していたアプリの現在 最初は @fromkk さんの発表でした。 メモ 振り返り 度重なる判断ミス ア
どうも、今さらラブライブにハマっている @tobi462 です。 なにそれイミワカンナイ? さて、今回はペンギン村のロゴ・ステッカーが出来るまでの話です。 ロゴ原案を担当した私と、デザイナへの発注・ステッカー作成を担当した かむい 氏の2名でお送りします。 完成したステッカー 記事の前半は私、後半は「かむい」氏がお送りします。 ペンギン村のロゴが欲しい! ロゴのデザイン(原案) 第1案:村にある小屋で開発 第2案: 漢字の「村」にペンギンを融合 デザイナへの発注 ステッカーの作成 おわりに ペンギン村のロゴが欲しい! 以前より「ペンギン村のロゴが欲しい」という話が出ていました。 ペンギン村はただの技術者どうしの集まりですが、iOSDC 2018 では このすばCfP なんてサービスを公開したりもして、シンボルとなるロゴが欲しいという空気感が高まっていました。 しかし、ペンギン村にはデザイン
はじめに おは椎名!かむいです。 今回、ペンギン村で初の開発合宿を敢行しました。 スペシャルゲストとしてダンボー氏, やみつき氏にもお越し頂き、千葉の土善旅館に行ってきたイベントをレポートしたいと思います。 なお当日の感想はTwitterにて #ペンギン村開発合宿 というハッシュタグを作って頂いたので、当日の様子についてはそちらを見て頂いても良いかもです。 都心部でも雪が積もる天気でしたが、旅館の庭園の雪化粧が見れてとてもエモかったです 土善旅館のここがスゴい!(声: 中井和哉) エンジニアのための開発合宿プラン、弓道場を備えた弓道合宿プランがある デザイナー, 漫画家などの執筆者のための原稿合宿執筆プランもある 温泉が24時間入れる 猫と開発ができる 看板猫が何匹かいるらしい。圧倒的可愛さ 今回は開発部屋に遊びに来てくれず(´・ω・`) 寒さのせいでどこかでまったりしてたのかな? 実際に
自己紹介 概要 できること 使い所 方法 手順 リファレンスからデリファレンスする方法 x/gx コマンドを使う。 expression -l objc -o -- *(id**)を使う キャプチャされたデータが知りたい場合 動作環境 備考 脚注 自己紹介 ペンギン村の通行人 、po_miyasakaです。 概要 できること 任意のタイミングでメモリ上に保持されているクロージャが定義されている場所を表示する。おそらく本邦初公開😎 使い所 手順がちょっと大変なので、どうしてもリークを確かめたい時とかに使えるかも。 方法 手順 Debug Memory Graphを開く closureでコンポーネントを検索すると swift closure contextというクラスのインスタンスのアドレスが複数引っかかる このインスタンスがクロージャにキャプチャされたデータなどのクロージャの情報のようであ
次のページ
このページを最初にブックマークしてみませんか?
『ペンギン村 Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く