<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: 井山梃子歴史館</title>
    <description>The latest articles on Forem by 井山梃子歴史館 (@__pandaman64__).</description>
    <link>https://forem.com/__pandaman64__</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F452531%2Fe206152c-376d-4ad4-a9a0-4774c64471d5.jpg</url>
      <title>Forem: 井山梃子歴史館</title>
      <link>https://forem.com/__pandaman64__</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/__pandaman64__"/>
    <language>en</language>
    <item>
      <title>DeepL and disruptive innovation</title>
      <dc:creator>井山梃子歴史館</dc:creator>
      <pubDate>Fri, 21 Aug 2020 14:37:22 +0000</pubDate>
      <link>https://forem.com/__pandaman64__/deepl-and-disruptive-innovation-2gon</link>
      <guid>https://forem.com/__pandaman64__/deepl-and-disruptive-innovation-2gon</guid>
      <description>&lt;p&gt;This post is a translation of &lt;a href="https://dev.to/__pandaman64__/deepl-12p1"&gt;a Japanese article&lt;/a&gt; by DeepL.&lt;/p&gt;

&lt;p&gt;There was a hot discussion around a tweet about using DeepL to write a paper.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--6qzoNSz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1207619187079647236/Vpnw01k1_normal.jpg" alt="みのん profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        みのん
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @min0nmin0n
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      投稿論文でDeepLを使って書いた英文と自力で全て書いた段落を用意して英文校正に出したら、明らかにDeepLベースで書いた方が修正が少なくて衝撃。技術の発達で英語力そのものの壁はどんどん無くなりつつあるので、そもそもの日本語での読み書き、論理的思考能力の重要性がどんどん増している気がする。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      10:45 AM - 20 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1911
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      7028
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;blockquote&gt;
&lt;p&gt;translation:&lt;br&gt;
When I prepared the English text of my submitted paper using DeepL and the paragraphs I wrote on my own, I was shocked to find that the one based on DeepL required fewer corrections than the other. The barrier to English proficiency itself is disappearing as technology develops, so the ability to read, write and think in Japanese and to think logically is becoming more and more important to begin with. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I see this situation as a disruptive innovation. That is, while the current machine translation output is too rough for those who currently speak English well to use, the vast majority of the rest of the English-challenged population will find it &lt;strong&gt;easier&lt;/strong&gt; to get fluent English through DeepL than to grumble about it themselves.&lt;/p&gt;

&lt;p&gt;I belong to the latter. My English is good enough to finally pass the TOEFL screening at CS universities in the U.S. (I can't pass CMU though), and although I can read and write English papers, conversation is challenging for me. But at this level, DeepL generates more natural-looking English sentences.&lt;/p&gt;

&lt;p&gt;Of course, DeepL makes some "terrible" mistakes, such as reversing the meaning of sentences or dropping sentences, but these can be corrected by looking at the English text. Moreover, it continues to retranslate automatically as you make changes, so you can keep selecting English snippets that fit your style and have them translated in no time at all. This is quite an extraordinary experience.&lt;/p&gt;

&lt;p&gt;On the other hand, there are some arguments against the use of DeepL&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--JDFFTnDq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/990092307448840192/nsmNqd6U_normal.jpg" alt="早川　智@コロナウイルス対策には正しい情報を！ profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        早川　智@コロナウイルス対策には正しい情報を！
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @francescodamil6
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/min0nmin0n"&gt;@min0nmin0n&lt;/a&gt; ご自身の英語力を高める上でこれはお勧めしません。慣れてくると人間が書いた文章と翻訳ソフトのそれはすぐにわかります。アカデミアで残って行くには、母国でなくても自由に英語が使いこなせるようにならないといけないと院生たちにも話していますが、DeepLに負けるようではまだまだ修行が必要です。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      06:28 AM - 21 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      7
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;blockquote&gt;
&lt;p&gt;translation:&lt;br&gt;
I do not recommend this to improve your own English. Once you get used to it, you can easily distinguish between human writing and that of translation software. I tell my graduate students that if they want to remain in academia, they need to be able to use English freely, even if it's not their home country, but if they're not as good as DeepL, they still need to learn to use it.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--rJXSSj7t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1176211446109224960/Ep6QQfSb_normal.jpg" alt="Ryohei Thomas Nakano (MPIPZ) profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Ryohei Thomas Nakano (MPIPZ)
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @luckystrike1984
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      作文なんてのはね、前後の文脈での単語の組み合わせとか、響きとか、リズムとか、ちょっとしたニュアンスでの方向付けや暗示とか、そういうのが醍醐味なんであってね、それは個人の好みでありアートであり作品なわけだから、機械にそれができるとは思わないし、機械の作品は僕の作品じゃない。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:23 AM - 21 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      5
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;blockquote&gt;
&lt;p&gt;translation:&lt;br&gt;
Composition is all about the combination of words in the surrounding context, sound, rhythm, and slight nuances of direction and suggestion, and that's what I enjoy most about it, and since it's a personal preference, a work of art, and a piece of work, I don't expect machines to be able to do it, and the machine's work isn't my work. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is exactly the opinion of existing customers in disruptive innovation. For example, it is difficult to go through DeepL when discussing directly at an international conference, and it interrupts the flow of the conversation. There is a session time limit too. Besides, machine-translated texts are dull and boring. It is more important to improve one's overall English ability. This opinion is correct, and indeed they must have survived that way.&lt;/p&gt;

&lt;p&gt;However, the situation is changing. This is due not only to internal factors, such as improvements in machine translation technology, but also to external factors, such as the spread of COVID-19, which led to the cancellation and postponement of several international conferences earlier this year. On the other hand, we started to see some online conferences in the summer&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. In this case, voice recognition technology can be used for Internet-based conversations.&lt;/p&gt;

&lt;p&gt;For example, this year's interview for Google's employment examination was an English coding interview using Google Meet, and I remember that the function of transcribing the other person's speech in real time was very useful for me to understand English. The same goes for the YouTube subtitle feature. While it's hard to listen to international conferences and tech conference presentations in real time, it's still easy to read the subtitles as they come out. What would happen if we were able to put a translation in the subtitles? I expect that not a few people will use it.&lt;/p&gt;

&lt;p&gt;With the advent of DeepL, the acceptance of machine translation has reached a new level. The chances of seeing opinions like the one in the opening tweet have clearly increased. I'm sure they will continue to use DeepL. I believe that more and more new English learners will rely on DeepL. The flood of machine-generated English is bound to grow. As skilled English speakers increasingly interact with such English, we can expect their own standards to change. Perhaps one day, a sentence that is suitable for machine translation will be considered good. After all, &lt;a href="https://en.wikipedia.org/wiki/List_of_languages_by_total_number_of_speakers"&gt;English is a language with more non-native speakers than native speakers&lt;/a&gt;. The demand for non-native speakers will stimulate the machine translation market, leading to improved translation performance. It will attract non-native speakers and stimulate further demand. Will we ever see a day of disruptive innovation where machine translation outperforms native speakers?&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;There is a paradoxical concern that the normalization of international conferences online may lead to the anti-globalization of participants due to time zone issues.  Attending a 4 a.m. session is an experience I don't want to have again...  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>DeepLと破壊的イノベーション</title>
      <dc:creator>井山梃子歴史館</dc:creator>
      <pubDate>Fri, 21 Aug 2020 14:36:10 +0000</pubDate>
      <link>https://forem.com/__pandaman64__/deepl-12p1</link>
      <guid>https://forem.com/__pandaman64__/deepl-12p1</guid>
      <description>&lt;p&gt;論文の執筆にDeepLを使ったというツイートが話題になった．&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--6qzoNSz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1207619187079647236/Vpnw01k1_normal.jpg" alt="みのん profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        みのん
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @min0nmin0n
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      投稿論文でDeepLを使って書いた英文と自力で全て書いた段落を用意して英文校正に出したら、明らかにDeepLベースで書いた方が修正が少なくて衝撃。技術の発達で英語力そのものの壁はどんどん無くなりつつあるので、そもそもの日本語での読み書き、論理的思考能力の重要性がどんどん増している気がする。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      10:45 AM - 20 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1911
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296398001267601408" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      7028
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;自分はこの状況を破壊的イノベーションだと捉えている．つまり，現在英語を十分操れている人たちにとっては今の機械翻訳の出力はアラがあって使用に耐えないのだが，その他大勢の英語弱者にとってはDeepLに通す方が自分でうんうん唸るよりも流暢な英文が，&lt;strong&gt;簡単&lt;/strong&gt;に得られるのだ．&lt;/p&gt;

&lt;p&gt;かくいう自分も後者に属する．自分の英語力はアメリカCS大学のTOEFLスクリーニングをようやく突破できるくらい(CMUは無理)で，英語論文の読み書きはできるものの会話は難しい．しかし，それぐらいではDeepLの方が言い回しが自然な英文を生成してくれる．&lt;/p&gt;

&lt;p&gt;もちろん，DeepLは文章の意味を正反対にしたり文を落としたりと「ひどい」間違いをすることはあるが，それは英文を見て修正が可能だ．しかも，変更に応じて自動で再翻訳を続けてくれるから，自分のスタイルに合わせて英語のスニペットを選び続けるとあっという間に英文が出来上がる．これはなかなかとんでもない体験だ．&lt;/p&gt;

&lt;p&gt;一方で，DeepLの使用には次のような反論もある．&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--JDFFTnDq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/990092307448840192/nsmNqd6U_normal.jpg" alt="早川　智@コロナウイルス対策には正しい情報を！ profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        早川　智@コロナウイルス対策には正しい情報を！
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @francescodamil6
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/min0nmin0n"&gt;@min0nmin0n&lt;/a&gt; ご自身の英語力を高める上でこれはお勧めしません。慣れてくると人間が書いた文章と翻訳ソフトのそれはすぐにわかります。アカデミアで残って行くには、母国でなくても自由に英語が使いこなせるようにならないといけないと院生たちにも話していますが、DeepLに負けるようではまだまだ修行が必要です。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      06:28 AM - 21 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      1
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296695645454004224" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      7
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--rJXSSj7t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1176211446109224960/Ep6QQfSb_normal.jpg" alt="Ryohei Thomas Nakano (MPIPZ) profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Ryohei Thomas Nakano (MPIPZ)
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @luckystrike1984
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      作文なんてのはね、前後の文脈での単語の組み合わせとか、響きとか、リズムとか、ちょっとしたニュアンスでの方向付けや暗示とか、そういうのが醍醐味なんであってね、それは個人の好みでありアートであり作品なわけだから、機械にそれができるとは思わないし、機械の作品は僕の作品じゃない。
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      09:23 AM - 21 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1296739714943287296" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      5
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;まさに破壊的イノベーションにおける既存顧客の意見である．例えば，国際学会で直接ディスカッションするときにわざわざDeepLを通すのは大変だし会話の流れを阻害してしまう．セッションの制限時間もある．それに，機械翻訳で生成された文章は無味乾燥でつまらない．それよりも自身の総合的な英語力を高めることが大事なのだ．この意見は正しいし，実際彼らはそのようにして生き残ってきたのであろう．&lt;/p&gt;

&lt;p&gt;しかし，状況は変わりつつある．それには機械翻訳技術の向上という内的な要因だけではなく，COVID-19の蔓延という外的要因も考えられる．COVID-19の影響により，今年初めの国際学会の中止・延期が相次いだ．一方で，夏ごろからは学会をオンライン開催するケースも見られ始めた&lt;sup id="fnref1"&gt;1&lt;/sup&gt;．この場合，インターネットに乗った会話に対して音声認識技術を活用することができるのだ．&lt;/p&gt;

&lt;p&gt;例えば，今年のGoogle入社試験はGoogle Meetを使っての英語コーディング面接だった．Google Meetでは相手の発話をリアルタイムに文字起こししてくれる機能があり，英語の聞き取りに大変便利だったことを覚えている．YouTubeの字幕機能も同じだ．国際学会やテックカンファレンスの発表をリアルタイムに聞き取るのは難しいが，どんどん出てくる字幕を読み取るのはまだ簡単である．もし字幕に翻訳文を出すことができたらどうなるだろう？少なくない人間が利用すると自分は予想している．&lt;/p&gt;

&lt;p&gt;DeepLの登場によって機械翻訳の受容は一つの段階に達したと感じている．冒頭のツイートのような意見を目にする機会は明らかに増えた．彼らはこれからもDeepLを利用し続けていくことだろう．英語の初学者がDeepLに頼るというケースも増えていくと考えている．機械生成された英文の氾濫は拡大していくに違いない．熟練した英語話者もそのような英語と付き合っていくことが増えれば自身の中の基準が変わっていくことは予期できる．もしかしたら機械翻訳に適した文章が良い文章とみなされる日も来るかもしれない．結局のところ&lt;a href="https://en.wikipedia.org/wiki/List_of_languages_by_total_number_of_speakers"&gt;英語は非ネイティブスピーカーの方が多い言語&lt;/a&gt;なのだ．非ネイティブの需要が機械翻訳市場を活性化させ，翻訳性能の向上につながる．それは非ネイティブ話者を引き寄せ，さらなる需要を喚起するであろう．機械翻訳がネイティブを上回るような，破壊的イノベーションの日は来るのだろうか？&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;ところで，国際学会のオンライン開催の常態化により，タイムゾーンの問題から学会のローカル化が進むのではないかという逆説的な懸念を抱いている．午前4時のセッションに参加するのは二度としたくない体験だ． ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>translation</category>
      <category>innovation</category>
    </item>
    <item>
      <title>cargo nix-installを作るぞ</title>
      <dc:creator>井山梃子歴史館</dc:creator>
      <pubDate>Thu, 20 Aug 2020 13:20:06 +0000</pubDate>
      <link>https://forem.com/__pandaman64__/cargo-nix-install-3mg9</link>
      <guid>https://forem.com/__pandaman64__/cargo-nix-install-3mg9</guid>
      <description>&lt;p&gt;Cargoは普通Rustのパッケージマネージャとして使われますが，&lt;code&gt;cargo install&lt;/code&gt;でRust製コマンドラインツールをインストールすることもできます．&lt;br&gt;
インストールできるツールには&lt;a href="https://github.com/killercup/cargo-edit"&gt;cargo-edit&lt;/a&gt;や&lt;a href="https://github.com/rust-secure-code/cargo-geiger"&gt;cargo-geiger&lt;/a&gt;のようなRust開発を便利にするツールのほか，&lt;a href="https://github.com/sharkdp/bat"&gt;bat&lt;/a&gt;や&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;ripgrep&lt;/a&gt;といった日々使うCLIもインストールできます．&lt;/p&gt;

&lt;p&gt;このように&lt;code&gt;cargo install&lt;/code&gt;は便利なのですが，自分はNixを常用しているのでこれらのツールもNixで管理したいわけです．&lt;br&gt;
特に問題となるのが，外部ライブラリへの依存です．&lt;br&gt;
例えば，diesel-cliは(デフォルトで)Postgresqlに依存しているため，&lt;code&gt;cargo install&lt;/code&gt;するにはPostgresqlをインストールしなければいけません．&lt;br&gt;
これを&lt;code&gt;nix-env&lt;/code&gt;で管理するのは二度手間ですし，&lt;code&gt;nix-shell&lt;/code&gt;の場合はGCによって依存先が消えてしまうリスクもあります．&lt;/p&gt;

&lt;p&gt;そこで，Nixを使ってRustクレートをインストールするツール&lt;code&gt;cargo nix-install&lt;/code&gt;を考えてみました．&lt;br&gt;
概ね次の手順でよいでしょう:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;クレートをフェッチする．&lt;/li&gt;
&lt;li&gt;crate2nixでNixファイルを生成．&lt;/li&gt;
&lt;li&gt;nix-envでインストール&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;まず初めにクレートを&lt;code&gt;crates.io&lt;/code&gt;(もしくはGitリポジトリ)からフェッチしてあげなければいけません．&lt;br&gt;
次に，Nixでビルドするための&lt;code&gt;default.nix&lt;/code&gt;を生成します．&lt;br&gt;
ここでは，&lt;a href="https://github.com/kolloch/crate2nix"&gt;crate2nix&lt;/a&gt;を使うことにします．crate2nixはRust依存関係を各クレートごとに別々のNixパッケージとしてビルドするので，Nixをビルドキャッシュとして有効活用できます．&lt;br&gt;
最後にNixパッケージとしてビルドしたツールを&lt;code&gt;nix-env&lt;/code&gt;でインストールしてあげます．これによってアンインストールもNixで行うことができます．&lt;/p&gt;

&lt;p&gt;実装するぞうおおおお&lt;/p&gt;

</description>
      <category>rust</category>
      <category>nix</category>
      <category>diary</category>
    </item>
    <item>
      <title>Dockerfileを書かずに(嘘)Nixで圧倒的に軽量なDockerイメージを作成する(539MB-&gt;245MB-&gt;173MB)</title>
      <dc:creator>井山梃子歴史館</dc:creator>
      <pubDate>Mon, 17 Aug 2020 12:42:18 +0000</pubDate>
      <link>https://forem.com/__pandaman64__/dockerfile-nix-docker-539mb-245mb-173mb-hi3</link>
      <guid>https://forem.com/__pandaman64__/dockerfile-nix-docker-539mb-245mb-173mb-hi3</guid>
      <description>&lt;p&gt;&lt;a href="https://kotaroooo0-dev.hatenablog.com/entry/2020/08/15/183929"&gt;Buildpacksの紹介記事&lt;/a&gt;の便乗です．&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nixos.org/"&gt;Nix&lt;/a&gt;はパッケージマネージャの一種で，決定的なビルドを提供することを主眼としています．この記事では，Nixを使って&lt;strong&gt;更に小さいDockerイメージを構築する&lt;/strong&gt;ことを目指します．&lt;/p&gt;

&lt;h1&gt;
  
  
  アプリのビルド
&lt;/h1&gt;

&lt;p&gt;今回は元記事と同じくJavaアプリをビルドしてみます．&lt;br&gt;
Nixはビルドの決定性を維持するために，アプリケーションの依存関係を厳密に追跡する必要があり，これにはアプリケーションの使用しているライブラリも含まれています．&lt;br&gt;
そこで，Nixの世界では各プログラミング言語のパッケージマネージャの情報をNixに渡してあげるツールがよく用いられます．&lt;br&gt;
今回はJavaなので，&lt;a href="https://github.com/nix-community/mavenix"&gt;mavenix&lt;/a&gt;を使用します．&lt;/p&gt;

&lt;p&gt;まずは，&lt;a href="https://github.com/nmattia/niv"&gt;Niv&lt;/a&gt;を使ってmavenixをプロジェクトローカルにダウンロードします．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;niv init
Initializing
  Creating nix/sources.nix
  Creating nix/sources.json
  Importing &lt;span class="s1"&gt;'niv'&lt;/span&gt; ...
  Adding package niv
    Writing new sources file
  Done: Adding package niv
  Importing &lt;span class="s1"&gt;'nixpkgs'&lt;/span&gt; ...
  Adding package nixpkgs
    Writing new sources file
  Done: Adding package nixpkgs
Done: Initializing

&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;niv add nix-community/mavenix
Adding package mavenix
  Writing new sources file
Done: Adding package mavenix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;次の&lt;code&gt;shell.nix&lt;/code&gt;を使ってmavenixがインストールされた開発環境を構築します．Nixではプロジェクトごとの開発ツールをグローバルにインストールする必要が無いのです！&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# shell.nix&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./nix/sources.nix&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nixpkgs&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nv"&gt;mavenix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mavenix&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;cli&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mkShell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;buildInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nv"&gt;mavenix&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;開発環境の起動には&lt;code&gt;nix-shell&lt;/code&gt;を使いましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;nix-shell
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;これでmavenixが使えるようになりました．&lt;code&gt;mvnix-init&lt;/code&gt;で&lt;code&gt;default.nix&lt;/code&gt;を生成します．&lt;code&gt;default.nix&lt;/code&gt;はNixにアプリケーションをビルドする方法を伝えるためのファイルです．今回の場合はmavenixによってMavenアプリ用のテンプレートが出力されます．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;mvnix-init 

  Creating files:

./default.nix

  1. Configure by editing &lt;span class="s1"&gt;'./default.nix'&lt;/span&gt;
  2. Create a lock file by running &lt;span class="s1"&gt;'mvnix-update "./default.nix"'&lt;/span&gt;
  3. Build your project &lt;span class="s1"&gt;'nix-build "./default.nix"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;このインストラクションに従うとアプリのビルドが完了します．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;mvnix-update
...時間がかかる...
&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;nix-build &lt;span class="nt"&gt;--no-out-link&lt;/span&gt;
nix/store/ph7mw7lja1i3b8m7lwa1746r297l5bg8-sample-0.0.1-SNAPSHOT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;出力されたパスにビルド結果が出力されているのを確認しましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; /nix/store/ph7mw7lja1i3b8m7lwa1746r297l5bg8-sample-0.0.1-SNAPSHOT/share/java/
total 18M
&lt;span class="nt"&gt;-r--r--r--&lt;/span&gt; 1 root root  18M Jan  1  1970 sample-0.0.1-SNAPSHOT.jar
&lt;span class="nt"&gt;-r--r--r--&lt;/span&gt; 1 root root  137 Jan  1  1970 sample-0.0.1-SNAPSHOT.metadata.xml
&lt;span class="nt"&gt;-r-xr-xr-x&lt;/span&gt; 1 root root 1.4K Jan  1  1970 sample-0.0.1-SNAPSHOT.pom
&lt;span class="nt"&gt;-r--r--r--&lt;/span&gt; 1 root root   72 Jan  1  1970 sample-0.0.1-SNAPSHOT.properties
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ローカルで起動することもできます．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;nix-shell &lt;span class="nt"&gt;-p&lt;/span&gt; jdk &lt;span class="c"&gt;# OpenJDKを一時的にインストール&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; /nix/store/ph7mw7lja1i3b8m7lwa1746r297l5bg8-sample-0.0.1-SNAPSHOT/share/java/sample-0.0.1-SNAPSHOT.jar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Dockerイメージのビルド
&lt;/h1&gt;

&lt;p&gt;それでは，このアプリケーション用のDockerコンテナを作成しましょう．これもNixを使うと簡単です！&lt;br&gt;
コンテナ内にJavaを入れたいので，&lt;code&gt;default.nix&lt;/code&gt;を修正します．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# default.nix&lt;/span&gt;
&lt;span class="c"&gt;# This file has been generated by mavenix-2.3.3. Configure the build here!&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;mavenix-src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;fetchTarball&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/nix-community/mavenix/tarball/v2.3.3"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;sha256&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1l653ac3ka4apm7s4qrbm4kx7ij7n2zk3b67p9l0nki8vxxi8jv7"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;# pkgs is pinned to 19.09 in mavenix-src,&lt;/span&gt;
  &lt;span class="c"&gt;# replace/invoke with &amp;lt;nixpkgs&amp;gt; or /path/to/your/nixpkgs_checkout&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;mavenix-src&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;mavenix&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;mavenix-src&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nv"&gt;src&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="sx"&gt;./.&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;doCheck&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nv"&gt;mavenix&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;buildMaven&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;src&lt;/span&gt; &lt;span class="nv"&gt;doCheck&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;infoFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sx"&gt;./mavenix.lock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nv"&gt;buildInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;jre_headless&lt;/span&gt;
    &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;makeWrapper&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="nv"&gt;postInstall&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    # install java&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    makeWrapper &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;jre_headless&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/bin/java $out/bin/java \&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;      --add-flags "-jar $out/share/java/sample-0.0.1-SNAPSHOT.jar"&lt;/span&gt;&lt;span class="err"&gt;

&lt;/span&gt;&lt;span class="s2"&gt;    # create /tmp for Spring framework&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    mkdir $out/tmp&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;    chmod 777 $out/tmp&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;  ''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ここでは，&lt;code&gt;buildInputs&lt;/code&gt;のところでにJREを追加し，&lt;code&gt;postInstall&lt;/code&gt;フックでJavaバイナリを&lt;code&gt;/bin&lt;/code&gt;に配置しています．また，Springが実行時に&lt;code&gt;/tmp&lt;/code&gt;に書き込むのでディレクトリを作成しています．&lt;/p&gt;

&lt;p&gt;次の内容で&lt;code&gt;Dockerfile.nix&lt;/code&gt;を用意します．ハイ，&lt;code&gt;Dockerfile&lt;/code&gt;は書かなくともNixファイルが必要なのです．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./nix/sources.nix&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nixpkgs&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nv"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./default.nix&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;dockerTools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;buildImage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"example"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"latest"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c"&gt;# エントリポイント&lt;/span&gt;
    &lt;span class="nv"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;Cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="s2"&gt;"/bin/server"&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;標準のDockerfileではなく，Nixを使ってDockerイメージを作成しています．Dockerfileでは&lt;strong&gt;操作&lt;/strong&gt;(&lt;code&gt;apt install&lt;/code&gt;)を記述するのに対し，Nixを使った場合は&lt;strong&gt;内容&lt;/strong&gt;を記述します．&lt;br&gt;
今回の場合は先程作成したアプリのパッケージ(&lt;code&gt;./default.nix&lt;/code&gt;)&lt;strong&gt;だけ&lt;/strong&gt;をコンテナ内に持つように指定しています．&lt;br&gt;
ビルド方法はアプリのときと同じです．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;nix-build Dockerfile.nix &lt;span class="nt"&gt;--no-out-link&lt;/span&gt;                                                                                                                                                 
/nix/store/b8l5qssgiylc8yi4f8y2ybz83l4nqbrp-docker-image-example.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;このイメージは&lt;code&gt;docker load -i&lt;/code&gt;で読み込めます．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;docker load &lt;span class="nt"&gt;-i&lt;/span&gt; /nix/store/b8l5qssgiylc8yi4f8y2ybz83l4nqbrp-docker-image-example.tar.gz                                                                                                 
66dd4ba45ad5: Loading layer &lt;span class="o"&gt;[==================================================&amp;gt;]&lt;/span&gt;  174.5MB/174.5MB                                                                                                                                           
The image example:latest already exists, renaming the old one with ID sha256:76903c2f6febfd083934876f42a64e0bfd18442e80093b3c1021c97d81a35825 to empty string                                                                                
Loaded image: example:latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;実行してみましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 example:latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;やりました！&lt;br&gt;
サイズも&lt;strong&gt;173MB&lt;/strong&gt;と上出来ですね😎&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;~/buildpacks/samples/apps/java-maven]&lt;span class="nv"&gt;$ &lt;/span&gt;docker images | &lt;span class="nb"&gt;grep &lt;/span&gt;example                                                                                                                                                           
example latest 4c866b80b51a 50 years ago 173MB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>nix</category>
      <category>docker</category>
    </item>
    <item>
      <title>NixでNext.jsアプリをビルドする</title>
      <dc:creator>井山梃子歴史館</dc:creator>
      <pubDate>Fri, 14 Aug 2020 13:09:54 +0000</pubDate>
      <link>https://forem.com/__pandaman64__/nix-next-js-3171</link>
      <guid>https://forem.com/__pandaman64__/nix-next-js-3171</guid>
      <description>&lt;p&gt;この記事では，&lt;a href="https://nixos.org/"&gt;Nix&lt;/a&gt;を使って&lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt;アプリをビルドします．&lt;a href="https://github.com/pandaman64/build-next-with-nix"&gt;GitHub&lt;/a&gt;にこの記事の内容を実行したリポジトリを用意したのでそちらもご覧ください．&lt;br&gt;
Nixを使う利点は適当にググってください．&lt;/p&gt;

&lt;p&gt;まずはプロジェクトディレクトリを作成してgitリポジトリを初期化しましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;build-next-with-nix
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;build-next-with-nix/
&lt;span class="nv"&gt;$ &lt;/span&gt;git init
Initialized empty Git repository &lt;span class="k"&gt;in&lt;/span&gt; /path/to/build-next-with-nix/.git/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;つぎに，ビルドに必要なツールをインストールします．このプロジェクトでは以下のツールを使います．&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/hercules-ci/gitignore.nix"&gt;gitignore.nix&lt;/a&gt;: .gitignoreに応じて必要なファイルをフィルタします．&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/serokell/nix-npm-buildpackage"&gt;nix-npm-buildpackage&lt;/a&gt;: npm(yarn)プロジェクトのビルドに使います．&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/nmattia/niv"&gt;niv&lt;/a&gt;を使ってインストールします．さくっと入れれてハッシュも自動で計算してくれるのはすごい！&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;niv init
Initializing
  Creating nix/sources.nix
  Creating nix/sources.json
  Importing &lt;span class="s1"&gt;'niv'&lt;/span&gt; ...
  Adding package niv
    Writing new sources file
  Done: Adding package niv
  Importing &lt;span class="s1"&gt;'nixpkgs'&lt;/span&gt; ...
  Adding package nixpkgs
    Writing new sources file
  Done: Adding package nixpkgs
Done: Initializing
&lt;span class="nv"&gt;$ &lt;/span&gt;niv add hercules-ci/gitignore.nix
Adding package gitignore.nix
  Writing new sources file
Done: Adding package gitignore.nix
&lt;span class="nv"&gt;$ &lt;/span&gt;niv add serokell/nix-npm-buildpackage
Adding package nix-npm-buildpackage
  Writing new sources file
Done: Adding package nix-npm-buildpackage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;それではNextアプリを作っていきましょう．今回は&lt;a href="https://github.com/vercel/next.js/tree/master/examples/with-typescript-eslint-jest"&gt;TypeScript + ESLint + Jestのテンプレート&lt;/a&gt;を使うことにします．&lt;br&gt;
まずは&lt;code&gt;shell.nix&lt;/code&gt;を作って&lt;code&gt;npm&lt;/code&gt;のインストールされた開発環境を立ち上げます．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# shell.nix&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./nix/sources.nix&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nixpkgs&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mkShell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;buildInputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nodejs&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;nix-shell
&lt;span class="o"&gt;[&lt;/span&gt;nix-shell:~/build-next-with-nix]&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;テンプレートを展開しましょう．これには少し時間がかかります．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npx create-next-app next-app &lt;span class="nt"&gt;--example&lt;/span&gt; https://github.com/vercel/next.js/tree/master/examples/with-typescript-eslint-jest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;それでは，サーバを起動してみましょう！&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;next-app/
&lt;span class="nv"&gt;$ &lt;/span&gt;npm run dev

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; with-typescript-eslint-jest@1.0.0 dev /home/pan/build-next-with-nix/next-app
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

ready - started server on http://localhost:3000
event - compiled successfully
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;うまくいきましたね．&lt;br&gt;
つぎに，このプロジェクトをNixを使ってビルドします．&lt;br&gt;
まず，&lt;code&gt;next.config.js&lt;/code&gt;を使ってNextの設定を変更する必要があります．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// next.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;distDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;generateBuildId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_BUILD_ID&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next-build&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ひとつ目の設定はNextの出力ディレクトリを変更しています．これは.gitignoreに含まれないディレクトリを指定しなければいけません&lt;sup id="fnref1"&gt;1&lt;/sup&gt;．&lt;br&gt;
次の設定はビルドを決定的にするために必要です．NextはデフォルトでビルドIDをランダムに生成するため，固定値に上書きしてあげる必要があります．ここではNixから環境変数経由で与えることにします．&lt;/p&gt;

&lt;p&gt;次のdefault.nixをプロジェクトルートに作成してください．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# default.nix&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./nix/sources.nix&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nixpkgs&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nv"&gt;bp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;callPackage&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nix-npm-buildpackage&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;"gitignore.nix"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;lib&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nv"&gt;gitignoreSource&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;gitignoreSource&lt;/span&gt; &lt;span class="sx"&gt;./next-app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
  &lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;buildNpmPackage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;npmBuild&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"npm run build"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;extraEnvVars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nv"&gt;NEXT_NIX_BUILD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;NEXT_BUILD_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;builtins&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;hashString&lt;/span&gt; &lt;span class="s2"&gt;"sha256"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;src&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ビルドしてみましょう！&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;nix-build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;成功したら，&lt;code&gt;result&lt;/code&gt;フォルダからサーバを起動してみましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;result
&lt;span class="nv"&gt;$ &lt;/span&gt;./bin/npm run start

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; with-typescript-eslint-jest@1.0.0 start /nix/store/wmw2hld9cdfxy7kdggb4qaxk7ravl8a4-with-typescript-eslint-jest-1.0.0
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next start

ready - started server on http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;😁&lt;/p&gt;

&lt;p&gt;Dockerイメージを作ることもできます．&lt;code&gt;Dockerfile.nix&lt;/code&gt;を次の内容で作成します．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# Dockerfile.nix&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./nix/sources.nix&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nixpkgs&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nv"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="sx"&gt;./default.nix&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kn"&gt;in&lt;/span&gt;
  &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;dockerTools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;buildImage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"build-next-with-nix"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"latest"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;inherit&lt;/span&gt; &lt;span class="nv"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nv"&gt;Env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"NODE_ENV=production"&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="nv"&gt;Cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"/bin/npm"&lt;/span&gt; &lt;span class="s2"&gt;"run"&lt;/span&gt; &lt;span class="s2"&gt;"start"&lt;/span&gt; &lt;span class="s2"&gt;"--scripts-prepend-node-path"&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ビルドしてみましょう．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;nix-build Dockerfile.nix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;作成したDockerイメージは&lt;code&gt;docker load&lt;/code&gt;で読み込めます．&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker load &lt;span class="nt"&gt;-i&lt;/span&gt; result 
Loaded image: build-next-with-nix:latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;実行してみましょう！&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 build-next-with-nix

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; with-typescript-eslint-jest@1.0.0 start /nix/store/231hhb2sbpqvcg1y4jsmhzycfwnhnvbn-with-typescript-eslint-jest-1.0.0
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next start

ready - started server on http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;😎👍&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;なぜかは分かりません． ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>nextjs</category>
      <category>nix</category>
    </item>
  </channel>
</rss>
