Server-Side Swi* 2016.05.22@如法会#1 Daijiro Abe
Swi*
2016.05.22@如法会#1 Daijiro Abe
• 普段仕事ではiOS開発に使っています • Server-Sideは趣味
• まだまだ発展途上 • 仕事で使うにはリスキー
• 将来的にはかなり期待
swi*env
2016.05.22@如法会#1 Daijiro Abe
• https://github.com/kylef/swi*env • 複数のバージョンのSwi*を簡単に切り替えられる
• プロジェクト単位での切り替えにも対応
CLion
2016.05.22@如法会#1 Daijiro Abe
https://www.jetbrains.com/clion/
CLion
2016.05.22@如法会#1 Daijiro Abe
• IntelliJやAppCodeなどのJetBrains社の製品 • C/C++の開発環境だがSwi*にも対応
• コード補完 • デバッギング
Swi* Package Manager
2016.05.22@如法会#1 Daijiro Abe
• 標準のパッケージ管理システム • Package.swi*に記述
• swi* build --init で雛形生成 • swi* build --fetch で依存ライブラリを取得
Problems
2016.05.22@如法会#1 Daijiro Abe
• Foundationが未完成 • NSURLSession, NSPredicate などがまだ使えない!
https://github.com/apple/swi*-corelibs-foundation/blob/master/Docs/Status.md
• PureSwi*/Swi*Foundation• print()がバッファリングされる
• gulpでビルド&実行しているとログが出ない... • fflush(stdout)
• String(format: , arguments:) が使えない... • 4/12のバージョンで実装されたようです!
HotReload
2016.05.22@如法会#1 Daijiro Abe
• ソースコードを監視し変更があればビルド&リスタート • ファイル監視
• gulp-watch • gulp.watchだとファイルの追加に対応できない
• ビルドスクリプトの実行 • child_process.execFile()
• リスタート • gulp-process.start()で実行 • gulp-procees.restart()でリスタート
Docker
2016.05.22@如法会#1 Daijiro Abe
FROM ubuntu:wily
RUN apt-get update RUN apt-get install -qy git lsb-release curl libpython-dev libxml2-dev clang libicu-dev build-essential RUN git clone https://github.com/kylef/swiftenv.git /usr/local/swiftenv ENV SWIFTENV_ROOT /usr/local/swiftenv ENV PATH $SWIFTENV_ROOT/bin:$SWIFTENV_ROOT/shims:$PATH
RUN swiftenv install DEVELOPMENT-SNAPSHOT-2016-04-12-a
• swi*envでSwi*を入れる最小構成
Docker
2016.05.22@如法会#1 Daijiro Abe
: (続き) # npm, gulp関係を入れる RUN apt-get install -qy nodejs npm RUN rm -rf /var/lib/apt/lists/* \ && ln -s `which nodejs` /usr/local/bin/node RUN npm install -g gulp RUN mkdir /work \ && cd /work \ && npm install gulp gulp-process gulp-watch
• gulp関係を追加
Docker
2016.05.22@如法会#1 Daijiro Abe
: (続き) # スクリプトのコピー COPY gulpfile.js /work/gulpfile.js COPY build.sh /work/build.sh COPY dev.sh /dev.sh
RUN chmod +x /work/build.sh \ && chmod +x /dev.sh
WORKDIR /src
CMD ["/dev.sh"]
• スクリプトのコピー
Docker
2016.05.22@如法会#1 Daijiro Abe
• gulpfile.js 1 var project = process.env.PROJECT_NAME; 2 var working_dir = process.env.WORKING_DIR; 3 4 var gulp = require('gulp'); 5 var gulpProcess = require('gulp-process'); 6 var watch = require('gulp-watch'); 7 var fs = require('fs'); 8 var exec = require('child_process').execFile; 9 10 gulp.task('copy',function(){ 11 return gulp.src(['Package.swift','Sources/*.swift','Sources/**/*.swift','Tests/*.swift','Tests/**/*.swift'], {cwd: working_dir, base: working_dir}) 12 .pipe(gulp.dest('./')); 13 }); 14 15 gulp.task('build', ['copy'], function(cb) { 16 exec('./build.sh', function(err,stdout,stderr) { 17 console.log(stdout); 18 gulpProcess.restart('swiftapp'); 19 cb(err); 20 }); 21 }); 22 23 gulp.task('watch', function(){ 24 gulpProcess.start('swiftapp','.build/debug/'+project); 25 26 watch(['Package.swift','Sources/*.swift','Sources/**/*.swift','Tests/*.swift','Tests/**/*.swift'],{ cwd: working_dir },function(event){ 27 gulp.start(["copy","build"]); 28 }); 29 });
Docker
2016.05.22@如法会#1 Daijiro Abe
• 紹介したファイルのリポジトリhttps://github.com/d-abe/dockers/tree/master/swi*
• 細かい質問などあれば... • Facebook • メール
https://www.facebook.com/dai.abe