<!DOCTYPE html> <html lang="ja"> <!-- Head tag --> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="icon" type="image/png" href="https://contents.ogatism.net/ogatism.png"> <link rel="stylesheet" href="/css/bootstrap.min.css"> <link rel="stylesheet" href="/css/style.css"> <!--Description--> <meta name="description" content="最近個人的な事情でswiftを触ってまして。 さすがにいろんな言語携わっている自分だから仕様はすぐに把握できたのだけれど、なぜかやたらとビルドが遅い。 cpuが100%超えにすぐなるのだ。 MacBookがダメな子?とも思ったけど、どうやらビルドにものすごく時間がかかってしまう要因があるようなのです。 ってことでビルドが遅いと思ったら以下の点に注意しましょう。"> <!--Author--> <meta name="author" content="Yuji Ogata"> <!--Open Graph Title--> <meta property="og:title" content="swiftでビルドが遅い場合にチェックするところ"/> <!--Open Graph Site Name--> <meta property="og:site_name" content="ogatism"/> <!--Page Cover--> <meta property="og:image" content=""/> <!-- Title --> <title>swiftでビルドが遅い場合にチェックするところ - ogatism</title> <style> </style> <!-- Custom CSS --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-43476132-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-43476132-1'); </script> <meta name="generator" content="Hexo 5.4.1"><link rel="alternate" href="/feed.xml" title="ogatism" type="application/atom+xml"> </head> <body> <div class="container zinnia-page"> <header> <div class="zinnia-logo text-center"> <h1><a href="index.html"><img src="https://contents.ogatism.net/ogatismlogoB1.png" alt="" width="800" height="320" class="blog-header"></a></h1> </div> <div class="zinnia-menu text-center"> <nav class="navbar"> <div class="navbar-collapse" id="myNavbar"> <ul class="nav navbar-nav"> <li><a href="/categories/fortune/">オガティの星占い</a></li> <li><a href="/about/">オガティとは</a></li> <li><a href="/post/swiss/swiss_index/">Swiss Ephemeris</a></li> <li><a href="/biz/">依頼・問い合わせ</a></li> </ul> </div> </nav> </div> </header> <div class="zinnia-main-content"> <div class="row"> <div class="col-md-10 col-md-offset-1"> <article class="single-blog-post"> <div class="post-header text-center"> <div class="single-tag"> <a href="/categories/diary/">雑記</a> </div> <h2 class="post-title"> <a href="/post/swift-slowly">swiftでビルドが遅い場合にチェックするところ</a> </h2> </div> <div class="post-thumb"> <a href="/post/swift-slowly"> <img src="https://contents.ogatism.net/ogatismlogoC1.png" alt=""></a> <div class="post-overlay-meta"> <ul class="post-meta pull-left"> <li class="date">2016/08/15</li> </ul> </div> </div> <div class="post-content"> 最近個人的な事情でswiftを触ってまして。 さすがにいろんな言語携わっている自分だから仕様はすぐに把握できたのだけれど、なぜかやたらとビルドが遅い。 cpuが100%超えにすぐなるのだ。 MacBookがダメな子?とも思ったけど、どうやらビルドにものすごく時間がかかってしまう要因があるようなのです。 ってことでビルドが遅いと思ったら以下の点に注意しましょう。 <span id="more"></span> <h3>型推論を減らす</h3> swiftはvariable型、変数の型を推測してくれる機能があるのですが、これが意外と時間かかっているようです。 たとえば <pre> let a = 2 let b = a * 3.14 </pre> なんて書くとaはintと思ったけどswiftはint * doubleなんてできないので、 これdoubleじゃん、ということになるためどうしても処理時間がかかる。 ってことでよほどのことが無い限りは型を指定しましょ。 もともとc言語出身の自分は型を書くのは全然違和感無いけど、web系言語から入った人はつらいかもね。 <h3>演算子を増やし過ぎない</h3> これも型推論が原因っぽいのですが、演算子が一つの行に複数あると非常に遅くなる。 <pre> a = b[0] * c.x + b[1] * c.y + b[2] * c.z + b[3] * c.xx </pre> こんな感じでしょうか。 こういうパターンは本気で数秒ビルドが遅くなるのですよ。 他の言語じゃ全然珍しくもない書き方なのに。 で、 <pre> let tmp1: Double = b[0] * c.x let tmp2: Double = b[1] * c.y let tmp3: Double = b[2] * c.z let tmp4: Double = b[3] * c.xx a = tmp1 + tmp2 + tmp3 + tmp4 </pre> こう分解すると明らかに早くなったり。 1行で書けるものを分解するのはストレスたまりますが、そうしないと余計にビルドが長くてイライラするのでしっかりと分離させましょう。 <h3>SourceControlを止める</h3> 昨今のIDEはみんなgitと連携した差分比較とか機能があるのでどのファイルに変分があったかすぐに分かるようになってます。 が、いちいちIDEがfetchして差分あるよ、なんてやってたら負荷がかかる。 自分でgit diffなりgit statusなり使ったほうが高速です。 ってことでこの機能はoffにしておいたほうがいいかと。 <h3>まとめ</h3> まだまだswiftは言語として不完全なところもあるからトラブルも多いです。 C#が良い言語だなあというのを再認識させられますな。 やっぱりxamarinで開発したほうがいい気がしてきた。 まあそれでもswiftを使わざるを得ない人はしっかり癖と付き合ってあげましょう。 個人的にはswiftのせいなのか、IDEはXcodeよりVisual Studioのほうが使いやすいなあと思うのですがどうでしょ。 </div> <div class="single-post-meta "> <div class="single-tag "> </div> </div> </article> </div> </div> </div> <hr> </div> <footer class="zinnia-footer"> <div class="container"> <div class="footer-social"> <div class="footer-logo text-center"> オガティ(緒形雄二) </div> <div class="footer-social-link"> </div> </div> </div> <div class="container footer-copyright-text text-center"> <p> © 2012-2025 ogatism/Yuji Ogata<br> © 2017 Zinnia - Designed & Developed by <a href="">ShapedTheme</a> </p> </div> </footer> <!-- After footer scripts --> </body> </html>