<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Serviceworker on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/serviceworker/</link>
		<description>Recent content in Serviceworker on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Thu, 09 Sep 2021 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/serviceworker/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>web2img - 一枚の画像ファイル内にパックしたウェブサイトを展開して動くツール</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/</link>
				<pubDate>Thu, 09 Sep 2021 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/etherdream/web2img&#34;&gt;EtherDream/web2img&lt;/a&gt; は、ウェブサイトを一枚の画像内にまとめ、またそのまとめた画像をブラウザ上で展開して表示するツールです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-screenshot.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-screenshot_hu_8df1e010b2d43a83.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-screenshot_hu_47e25b5f187a4de2.webp 768w, https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-screenshot_hu_2adf62cb20d04abb.webp 805w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-screenshot.png&#34; width=&#34;805&#34; height=&#34;349&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;複数の html だけでなく、CSS ファイルや JavaScript ファイル、画像や動画などリソースファイルをすべてエンコードして一枚の画像が出てきます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-akky-test-1.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-akky-test-1_hu_3d78d657b93965e3.webp 20w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-akky-test-1.png&#34; width=&#34;20&#34; height=&#34;20&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;画像は簡易なリードオンリーのファイルシステムのように使われています。これを展開するためにはトップの html と JavaScript ファイル一つだけが必要で、これを置いたウェブページからは ServiceWorker 経由で先に作成した画像ファイルが読まれ、デコードされて格納されていた html/css/js/jpg/mp4 等を使った元々のウェブサイトが動きます。(&lt;a href=&#34;https://caniuse.com/serviceworkers&#34;&gt;ServiceWorker に対応しているブラウザ&lt;/a&gt;で)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://etherdream.github.io/web2img/&#34;&gt;こちらに生成用のツールが公開されて&lt;/a&gt;いて、実際に試せます。&lt;/p&gt;&#xA;&lt;p&gt;Step 1 でローカルのウェブサイトのフォルダを指定すると、&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-generated.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-generated_hu_87ea653c9a97ef4f.webp 377w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-generated.png&#34; width=&#34;377&#34; height=&#34;524&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;フォルダに入っているファイルの情報と、ファイルをパックした画像が生成されます。&lt;/p&gt;&#xA;&lt;p&gt;この画像ファイルをインターネット上の&lt;a href=&#34;https://raw.githubusercontent.com/akky/web2img_test/master/web2img-akky-test.png&#34;&gt;適当な場所&lt;/a&gt;に置いて、Step 3に入力すると、&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-extractor.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-extractor_hu_2ffbd74e63e98293.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-extractor_hu_73a9bc2f4fc88d24.webp 665w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-extractor.png&#34; width=&#34;665&#34; height=&#34;422&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;この画像ファイルを展開して動かすための JavaScript ファイルを生成してくれます。&lt;/p&gt;&#xA;&lt;p&gt;この js をこれを呼ぶ最小の html ファイルの二つを置くと、そのページではパックされた&lt;a href=&#34;https://akimoto.jp/web2img/&#34;&gt;元々のウェブサイト/ページが表示されました&lt;/a&gt;。JavaScript を止めたり、ServiceWorker 非対応のブラウザで開くと何も表示されません。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-result.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-result_hu_dcd126789f8815a3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-result_hu_79e41fcb19bd986c.webp 661w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/09/web2img-packs-website-into-single-image-file/web2img-result.png&#34; width=&#34;661&#34; height=&#34;360&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
