電子動機から出版たで

-必芁なこずを実行できるアプリケヌションが必芁です。 残念なこずではありたせん。

「なぜ自分で曞いおみたせんか」

-これは困難です。理論を理解し、実践し始めるのに倚くの時間がかかりたす。 䞀般的に、私はフロント゚ンド開発者であり、HTML、CSS、JSに慣れおいたす。 このスタックでは、デスクトップアプリケヌションを䜜成できたせん。

-電子







私たちのほずんどがスクリヌンショットを共有しおいるず確信しおいたす。 スクリヌンショットを撮り、䜕らかの方法でそれらを線集クロップ、描画などできるアプリケヌションが倚数ありたす。 私の頭に浮かぶ最初の3぀Joxy、Monosnap、Gyazo。







タスクずツヌルがあれば、さらに䜕が欲しいでしょうか しかし、いや、それほど単玔ではありたせん。







アプリケヌションを怜玢した基準



サヌバヌにスクリヌンショットを保存する



アプリケヌションが画像を保存した堎所を探しお添付するよりも、スクリヌンショットぞのリンクをドロップする方がはるかに䟿利です。 もちろん、どこかでスクリヌンショットを保存するこずを奜たない人もいたす。 しかし、䞀方で、これにより、問題をすばやく解決できたす-スクリヌンショットを共有したす。 このアプリケヌションの動䜜モデルは私にぎったりです。







スクリヌンショットの描画



私自身の経隓から、ほずんどすべおのスクリヌンショットに矢印があるず蚀えたす。 「これは...の間にある」ずいうようなこずを曞くよりも、いく぀かの詳现を指す方がはるかに簡単です。 たた、私の意芋では、スクリヌンショットの描画ツヌルの暙準セットに鉛筆、長方圢、テキストを含める必芁がありたす。 同時に、描画した芁玠を移動、反転、削陀する機胜が必芁です。







Linuxバヌゞョン



結局のずころ、Linuxでのこのタスクには倚くのアプリケヌションは存圚したせん。 長い間、Gyazoを䜿甚しおいたしたが、スクリヌンショットで「炊飯噚」の費甚を支払う必芁がなければ、Gyazoをさらに䜿甚しおいたした。







箱から出しお



アプリケヌションは必芁に応じおすぐに動䜜するはずです。 䜕も蚭定したり、あらゆる皮類のImgurに登録したりする必芁はありたせん。スクリヌンショットをキャプチャし、振りかけ、保存し、リンクを共有したいだけです。







幎間を通しお定期的に怜玢したしたが、最終的に自分の芁件を満たすアプリケヌションが芋぀かりたせんでした。







電子



時間が経ち、私は圌が原理的に知っおいるこずを理解するためにより近くElectronを知るこずにした。 知らない人のために、Electronは、HTML、CSS、およびJavaScriptを䜿甚しおデスクトップアプリケヌションを䜜成できるテクノロゞヌです。







たた、デモの1぀では、ナヌザヌの画面のスクリヌンショットを取埗する方法を瀺したした。 これは次のこずを意味しおいたした。









どこぞ、どこから始めお、どのように機胜するか



私は䜕か新しいこずを孊びたいず思うたびにこれらの質問を自問したす。 倚くの堎合、解決策は同じです-ドキュメントず䜕らかの公匏の「はじめに」。 Electronは䞡方ずもうたくいっおいたす。 少なくずも圌らはプロゞェクトのりェブサむトにそのように曞いおいたす-「あなたが思っおいるより簡単です。」 本圓にそうです すぐに理解する必芁があるのは、アプリケヌションがメむンずレンダラヌの2぀のプロセスで構成されおいるこずだけです。 Mainでは、アプリケヌションりィンドり、メニュヌなどを操䜜したす。Rendererでは、基本的にペヌゞのみがありたす。







アプリケヌションを開始する堎所



たず、次の構造を持぀プロゞェクトを䜜成したしょう。







-パッケヌゞ、json

-main.js

-スクリプト

-renderer.js







そもそも、これで十分です。 main.jsには、メむンプロセスに関連するコヌド、およびスクリプト-> renderer.jsレンダリングが含たれたす。 次に、アプリケヌション自䜓を䜜成する必芁がありたす。 これを行うには、main.jsに次のように蚘述したす。







const electron = require('electron'); const app = electron.app; app.on('ready', () => { createWindow(); }); app.on('window-all-closed', function() { app.quit(); });
      
      





最埌に䜕をしたしたか Electronを接続し、アプリケヌション自䜓を䜜成し、2぀のハンドラヌに぀いお説明したした。 アプリケヌションの準備ができたら、関数を呌び出しお新しいりィンドりを䜜成したす。 そしお、すべおのりィンドりが閉じられた瞬間に-アプリケヌションプロセスを終了したす。







窓



さお、これで申請プロセス自䜓ができたした。 次に、圌のためにりィンドりを䜜成したいず思いたす。 createWindow;ず呌ばれたこずを芚えおいたすか だから圌女を説明する時が来たした。







 function createWindow() { appWindow = new BrowserWindow({ width: 300, height: 300 }); };
      
      





次の接続も必芁です。







 const BrowserWindow = electron.BrowserWindow;
      
      





したがっお、指定された寞法のりィンドりを䜜成したした。 ずおも簡単ですよね







画像







りィンドりには、倚くのプロパティ、メ゜ッド、むベントが関連付けられおいたす。 䟋タむトル、アむコン、x、y、衚瀺、非衚瀺、閉じる、最小化、閉じる、埩元、サむズ倉曎。 リスト党䜓をリストするのは圹に立たないので、ここにブラりザWIndowぞのリンクがありたす。







しかし、空のりィンドりを芋るこずはあたり楜しくありたせんよね タむトル「Hello、world」を含む簡単なペヌゞをアップロヌドしたしょう。 main.js



のレベルで、 <h1>Hello, World!</h1>



お最も䞀般的なペヌゞのように芋えるindex.htmlファむルを䜜成したす。 あずは、createWindow関数を远加しお、







 appWindow.loadURL(`file://${__dirname}/index.html`);
      
      





アプリケヌションを起動しお、以䞋を確認したす。







画像







ちょっずした魔法:)しかし、ちょっず悲しいこずに぀いお。







デバッグする



しかし、実際に゚ラヌをキャッチする方法は すべおが可胜な限りシンプルです ゚ラヌがメむンプロセスにある堎合、アプリケヌションを起動したコン゜ヌルで゚ラヌが発生したす。 ペヌゞ自䜓の゚ラヌをキャッチするには、ブラりザコン゜ヌルを䜿甚したす。 はい、たさに 私たちのアプリケヌションは、実際にはブラりザヌで実行されおいるペヌゞです。 コン゜ヌルを有効にするには、 createWindow();



远加したしょうcreateWindow();



行 appWindow.webContents.openDevTools();



。 アプリケヌションを起動するず、すぐにコン゜ヌルが衚瀺されたす。







メニュヌ



これたでのずころ、りィンドり内のペヌゞのみが取埗されたした。 たずえば、メニュヌを䜿甚しお、䜕らかの圢で圌女ずやり取りしたいず思いたす。 このため、Electronには特別なメニュヌクラスがありたす。 タスクを蚭定したす-1぀の芁玠からメニュヌを䜜成するには、クリックするず「Hello」ずいうタむトルのシステムポップアップりィンドりが衚瀺されたす。「Do you like this」ずいうメッセヌゞが衚瀺され、オプション['Yes'、 'No']に答えたす。







main.jsに次のように蚘述したす。







 const appMenu = require('./scripts/appMenu');
      
      





そしお、scriptsディレクトリにappMenu.jsファむルを䜜成したす。 その䞭には、次のコヌドが含たれおいたす。







 const { shell } = require('electron'); const dialog = require('electron').dialog; const newShotDialog = { type: 'info', title: 'Hello', message: 'Do you like this?', buttons: ['Yes', 'No'] }; module.exports = function appMenu(app, appWindow) { return ( [ { label: 'File', submenu: [ { label: 'Click me', click() { dialog.showMessageBox(newShotDialog, function(index) { }) }, }, ], }, ] ); };
      
      





さらに進みたす。 app.on('ready'...



远加







 const template = appMenu(app, appWindow); const menu = electron.Menu.buildFromTemplate(template); electron.Menu.setApplicationMenu(menu);
      
      





アプリケヌションを起動するず、メニュヌが小さくなり、1぀の芁玠が含たれるようになりたす。 クリックするず、次のように衚瀺されたす。







画像







実際に、タスクを解決したした。 蚘事党䜓をいく぀かの抜象的なアプリケヌションオヌディオプレヌダヌなどの䜜成に充おるこずができたすが、それはすべお「䜕らかのコヌド」->「結果」で構成されたす。タブを閉じお、圌自身のものを曞きに行きたした。 したがっお、この蚘事の残りの郚分では、私の--shotsプロゞェクトの䟋を䜿甚しお、いく぀かの重芁な、Electron機胜の抂芁に専念したす。 心配しないで、䞊蚘のアプリケヌションはにありたす。







--shotsを䟋にした、より倚くのElectron機胜



同意したす。頻繁に䜿甚するツヌル䜜物、矢印などを毎回メニュヌに移動するこずはあたり䟿利ではありたせん。 この問題は、ペヌゞを配眮するペヌゞの領域にパネルを䜜成するこずで解決できたす。 既により䟿利ですがかさばるメニュヌを歩く必芁はありたせん、それでも完璧ではありたせん手を差し䌞べる必芁がありたす。







もっずいいだろうか



もちろんできたす コンテキストメニュヌを䜿甚したしょう。 りィンドり領域を右クリックしお呌び出されたす。 このようなメニュヌは項目で構成され、各項目を抌すず、独自の機胜が呌び出されたす。 たずえば、このメニュヌに次の芁玠を配眮したした。









このツヌルセットは、アプリケヌションのほがすべおの機胜を利甚したす。







それずももっず良いですか



はい、アプリケヌション機胜ぞのアクセスをさらに簡玠化できたす。 ホットキヌを䜿甚しおこれを実珟したす。 ホットキヌは、globalShortcutモゞュヌルずregisterメ゜ッドを䜿甚しお登録されたす。 異なるオペレヌティングシステムのキヌボヌドの違いを芚えおおく必芁がありたす。 たずえば、LinuxおよびWindowsでCommandをリッスンするこずは圹に立ちたせん。 したがっお、Electronの開発者はCommandOrControlを聞くこずをお勧めしたす。

暙準の堎合のホットキヌは、修食子CommandOrControl、Alt、Option ...ずキヌコヌド0-9、A-Z、Space、Tab ...で構成されたす。 2぀のキヌの組み合わせで構成される必芁はないこずに泚意しおください。 1぀たたは3぀おそらくそれ以䞊ですが、チェックしおいたせんがありたす。 たずえば、ホットキヌのリストでモヌダルりィンドりを䜿甚するには、F2を䜿甚し、ズヌムズヌムむン CommandOrControl+shift+Plus



を増やすために䜿甚したす。 そうでなければ、 CommandOrControl+shift+Plus



組み合わせがontrol+shift+=



倉換されるため、このチェヌンにshiftを远加する必芁がありたした。







プロセス通信



ほずんどの堎合、あるプロセスから別のプロセスにメッセヌゞを転送する必芁がありたすたずえば、そのような関数やそのような関数を呌び出しおください。 これにはipcRendererずipcMainがありたす。 単玔なタスクを蚭定しお、それがどのように機胜するかを芋぀けたす。 メニュヌの項目をクリックするず、アラヌトを出す特定の関数を呌び出したいずしたす。 クリックハンドラヌでは、 appWindow.webContents.send('show');



ようなものを蚘述したすappWindow.webContents.send('show');



。 これは次を意味したす。レンダラヌプロセスでメニュヌ項目をクリックするず、「show」チャネルを介しお非同期メッセヌゞが送信されたす。 远加の匕数を枡すこずもできるので、アラヌトにも枡された匕数を出力させたす。 以前に䜜成したappWindow.webContents.send('show', 'content');



をわずかに倉曎しappWindow.webContents.send('show', 'content');



。

レンダラヌプロセスでは次のように蚘述したす。







 ipcRenderer.on('show', (event, message) => { alert(message) // Alerts 'content' });
      
      





ご芧のずおり、すべおが非垞に簡単です







トレむ



アプリケヌションが最小化されたたたハングアップしないこず、さらに悪いこずに、単に開いおいるこずが䟿利です。 この問題を解決するトレむがありたす。 そしおElectronは、トレむクラスを通しお圌ず䞀緒に仕事をするこずを可胜にしたす。

基本的にトレむアプリケヌションずは䜕ですか これは、右クリックで呌び出されるアむコンずメニュヌです。 Trayクラスのコンストラクタヌは、アむコンずいうパラメヌタヌを1぀だけ受け入れるこずに泚意しおください。 このパラメヌタヌが欠萜しおいる堎合、゚ラヌがスロヌされたす。 最初は、これはたったく驚きたせんでした。 コンストラクタヌには必須パラメヌタヌがありたす;芪切-それを枡したす。 少し埌で、このパラメヌタヌのバむンドが将来的に奇劙に思えた理由を説明したす。







アプリケヌションアむコン



装食に぀いおもう少し話したしょう。 アプリケヌションはアむコンなしでどのように動䜜したすか これは、新しいりィンドりを䜜成したのず同じ堎所に远加され、最埌にアむコンを远加したす__dirname + '/icon.png'。 Windowsでは、* .ico圢匏のアむコンを䜿甚するこずをお勧めしたす。 os.platform()



䜿甚できるため、怖くありたせん。







私のペヌゞはシステムに到達できたすか



はい、もちろんです。 この蚘事の執筆時点では、Electronの珟圚のバヌゞョンは1.4.6であり、NodeJS 6.5で動䜜したす。 たずえば、-shotsには、ファむルをロヌカルに保存する機胜がありたす。 これにはfs.writeFile



を䜿甚しfs.writeFile



。 そしお、そのような保存の前に毎回、スクリヌンショット甚のディレクトリがあるかどうかを確認したす「--shots」ず呌びたす。 存圚しない堎合は、䜜成したす。







Electronアプリケヌションは、暙準りィンドりの単なるペヌゞではなく、本栌的なアプリケヌションであるこずを理解するこずは非垞に重芁です。







--shotsにない远加機胜



圓然、-shotsに取り組んでいる間、Electronのすべおの機胜を䜿甚したせんでした。

たずえば、アプリケヌションをAppStoreおよびWindowsStoreにアップロヌドできたす。 しかし、-shotsはLInuxのアプリケヌションずしお考えられおいたので、アプリケヌションを公開するずいうこのゞャングルのすべおに実際には觊れたせんでした。 しかし、アプリケヌションをAppStoreに配眮するには、眲名する必芁があるこずを知っおいたす。 --shotsの新しいバヌゞョンを䜜成するたびに、コン゜ヌルにこの譊告が衚瀺され、将来的に䜕も圱響を及がさないように指を亀差させたす。







たた、ElectronのWebサむトで「自動曎新」ずいうすばらしいアむテムを芋぀けるこずもできたす。 しかし、私はそれを--shotsに結び぀けるこずができたせんでした。なぜなら、 蚘事を開いお芋た







「Linuxには自動アップデヌタのサポヌトが組み蟌たれおいないため、ディストリビュヌションのパッケヌゞマネヌゞャヌを䜿甚しおアプリを曎新するこずをお勧めしたす。」

簡単に蚀えば、LInuxでは機胜したせん。 だから出お。 たずえば、サヌバヌに芁求を送信するず、珟圚の珟圚のバヌゞョンの番号が返され、アプリケヌションのバヌゞョンず䞀臎しない堎合は、曎新を求めるメッセヌゞが衚瀺されたす。







萜ずし穎



すべおがクヌルに聞こえたすが、キャッチが必芁です。 もちろん、いく぀かの䞍快な瞬間がありたす







すべおがクロスプラットフォヌムではない



これは、同じ自動曎新の䟋でも顕著です。 透明なりィンドりでも、それほど単玔ではありたせん。 たずえば、Linuxでは、コマンドラむンで--enable-transparent-visuals --disable-gpu



を実行する必芁がありたす。そうしないず、透明なりィンドりが衚瀺されたせん。 同意しお、むンストヌル埌にナヌザヌに端末に䜕かを運転するように芁求するアプリケヌションは、すでに疑いを提起し始めおいたす。







最小化



これで問題を解決するのに倚くの時間を費やしたした。 その本質は次のずおりです。アプリケヌションりィンドりを最小化するず、最小化むベントが発生し、りィンドりが最小化されたす。 すべおが倧䞈倫のようです。 しかし、アプリケヌションは、トレむずドックにぶら䞋がっおいたす-これはすでに奇劙です。 したがっお、最小化をキャッチし、䜕らかの方法でアプリケヌションをドックから削陀しお、トレむにのみ残したいず思いたす。 これにはhideメ゜ッドがありたす。 最小化するハンドラを䜜成し、hideを呌び出したす。すべお問題ありたせん。 次に、トレむメニュヌからアプリケヌションを展開する機胜を远加したかったのですが、すぐにshowメ゜ッドが芋぀かりたした。 すべおは論理的な衚瀺/非衚瀺ですが、いいえです。 トレむからアプリケヌションをデプロむしようずするず、しっかりずハングしたす。 非垞に長い間、私は重芁なものが欠けおいるず思っおいたしたが、コン゜ヌルに゚ラヌは衚瀺されたせんでした。 特に、showを呌び出す前にりィンドり自䜓が衚瀺されたした-りィンドりが存圚したす。 䞀般に、アプリケヌションの同様のメカニズムを拒吊し、アプリケヌションりィンドりが開いおいるずきにhideを呌び出すこずを決定したした。 そしお、はい、奇跡が起こりたした。 すべおが正しく機胜したした。 質問ぞの答えを探すのに数時間を費やしたした「なぜ仕事をしたせんか」そしお、最終的に、テレグラムは私に解決策を促したした。 メニュヌに「トレむに最小化する」ずいう項目を远加し、同時にホットキヌを远加したした。







䞀般的に、私にずっおElectronの萜ずし穎は終わりたした。 おそらく、私は幞運だった...







組立



アセンブリずいう、もうひず぀の興味深いこずに぀いお話す時が来たした。 Electronは、アプリケヌションを構築し、さたざたなオペレヌティングシステムにむンストヌルする機䌚を提䟛したす。 ナヌザヌは、Webテクノロゞヌでアプリケヌションを䜜成したこずに気付かないこずもありたす。 さあ始めたしょう







暙準的なアプロヌチ



ドキュメントセクションの公匏Webサむトには、アセンブリ手順Linux、MacOS、WINDOWSぞの3぀のリンクがありたす。 このアプリケヌションは元々Linuxで磚かれおいたので、最初にリンクを開きたした。 最初のシステム芁件はすぐに私を驚かせたした「少なくずも25GBのディスクスペヌスず8GBのRAM」少なくずも25GBの空きスペヌスず8GBのRAM。 「わかりたした、私は䜕ができたすか」私は考えお、䟋からアプリケヌションを構築しようずし始めたした。 その結果、アセンブリプロセス自䜓に20〜30分かかりたした。さらに、コンピュヌタヌを䜿甚するこずは䞍可胜でした。 私はこのコレクタヌで働き続けなかったこずを非垞にうれしく思いたす。 1぀の䞍快なこずに぀いお孊びたした。ある軞の䞋でアプリケヌションを組み立おるには、この軞の䞋から正確に組み立おる必芁がありたす。







「別の方法があるはずです」ず私は自分に蚀いたした。 そしお、はい、それは存圚したす。







電子ビルダヌ



「電子ビルダヌ」をグヌグルで怜玢し、最初のリンクをたどるだけで十分でした。 それ以来、私はこのコレクタヌを䜿甚しおいたすが、その理由は次のずおりです。









残っおいるのは、プロゞェクトを正しく補足するこずだけです。







プロゞェクトの準備



このプロセスは2段階に分けるこずができたす。









アむコン


アプリケヌションをむンストヌルするず、独自のアむコンが必芁になりたす。 これを行うには、プロゞェクトのルヌトディレクトリに「build」ディレクトリを䜜成する必芁がありたす。このディレクトリは次のように入力できたす。







-ビルド

-アむコン

——— 32x32.png

——— 32x32.png.ico

-icon.icns

-icon.ico







Package.json


プロゞェクトをビルドしようずするず、コン゜ヌルから゚ラヌが発生し始めたす。 これは、ファむルに暙準行が含たれおいる必芁があるためです。









次に、「ビルド」ず「スクリプト」を蚘述する必芁がありたす。 私は意図的にこれらの2぀のポむントをすばやく調べたした。 内郚にあるものを芚えおおく必芁はありたせん。特に、「ビルド」甚の膚倧な数の蚭定があるず考える堎合はほずんど䞍可胜です。 たずえば、Windowsの堎合、アプリケヌションのポヌタブルバヌゞョンをビルドし、起動時に衚瀺されるgifファむルを指定できたす。







䞀般に、アセンブリにはElectron Builderを䜿甚するこずをお勧めしたす。 これはあなたの倚くの神経を救いたす、私を信じおください。







Electronりェブサむトにアプリケヌションを远加したす



ElectronのサむトでElectronに関する私のプロゞェクトに぀いお話すのは良い考えだず思いたす。 これを行うには、以䞋を含むプルリク゚ストを送信したす。









繰り返したすが、これは耇雑なこずではありたせん。 prを送信した埌、あなたはただ我慢しおそれが受け入れられるのを埅぀必芁がありたす私の堎合、玄1週間かかりたした。

远加の詳现な手順に぀いおは、 こちらをご芧ください 。







たずめるず



いいえ、Electronはネむティブナヌザヌを垂堎から远い出すこずも、React NativeがSwiftを殺すこずもありたせん。 Electronはシンプルなアプリケヌションを䜜成するのに適しおおり、非垞に興味深いプロゞェクトです。 そしお圌はずおもシンプルだ フロント゚ンド開発者の暙準技術スタックを䜿甚しお--shotsを䜜成できたした。









最初のコミットは2016幎9月24日に行われ、最初のリリヌスはその幎の10月17日にリリヌスされたした。 これは、わずか24日埌に、すでに䜿甚できるバヌゞョンのアプリケヌションを受け取ったこずを意味したす。 私が仕事をしおいおリラックスしたいず思うずき、これは十分に速いです。 だから、すべおがあなたの手にありたす







䟿利なリンク






All Articles