توسعه نرمافزارها هر روز آسانتر میشود. قدرتمند شدن پردازندهها باعث شد تا برنامههای چند سکویی راحتتر از همیشه اجرا شوند و بتوان تنها با فراگیری یک زبان سطح بالا برنامههای خلاقانه طراحی کرد. یکی از جدیدترین فریمورکهای ساخته شده برای توسعه نرمافزارهای دسکتاپ، فریمورک NativePHP نیتیوپیاچپی است. این خبر خوبی برای توسعه دهنگان PHP است. از این پس تنها با فراگیری 4 زبان PHP ،HTML ،CSS و Javascript شما قادر خواهید بود نرمافزارهای دسکتاپ را توسعه دهید. البته باید دید این فریمورک تا چه حد درمقابل فریمورکهای دیگری همچون Flutter میتواند بازی را به نفع خود تغییر دهد. در ادامه به بررسی فریمورک NativePHP خواهیم پرداخت:
ساختار فریمورک NativePHP
این فریمورک دقیقاً همان PHP است که بر روی سرور اجرا میشد. با این تفاوت که حالا به صورت زندهتر و مستقیم درون هسته برنامه اجرا میشود. درست همانند Java و Python که هم بر روی سرور اجرا میشوند و هم برای دسکتاپ فریمورک UI دارند. اگر بخواهیم دقیقتر بگوییم، در NativePHP مجموعهای از کلاسها افزوده شده که برای نمایش پنجرهها و کنترل وضعیت برنامه در سیستمعامل استفاده میشود. البته NativePHP یک بسته مکمل است که بر روی فریمورکهای دیگر همچون الکترون Electron و تاوری Tauri نصب و اجرا میشود.
سوألی که این در اینجا مطرح میشود این است که با وجود فریمهای قدرتمند و متعدد، واقعاً چه نیازی به وجود چنین فریمورکی است؟ میتوان اینگونه پاسخ داد افرادی که به زبان PHP مسلط هستند، بدون نیاز به فراگیری فریمورکهای دیگر میتوانند با همان دانش قبلی به توسعه نرمافزارهای دسکتاپ بپردازند. NativePHP اساساً یک فریمورک برای رابط کاربری نیست اما میتواند با دیگر فریمورکها برای ایجاد رابط کاربری استفاده شود.
NativePHP یک سکو بالای بالاتر از سکوی Electron و Tauri قرار میگیرد تا به جای آنها عمل کند و با پشتیبانی از هر دو فریمورک، یک سری کلاس واحد را ایجاد کند. این کار کمک میکند تا برنامه خیلی سریعتر آماده شود. البته نکته اینجاست که باید دید این نوع برنامهها چقدر جای پیشرفت دارند. معمولا زمانی که از چندین فریمورک همزمان استفاده میکنیم، این دغدغه وجود دارد که یکی از فریمورکها به مرور زمان از دور خارج شود و برنامه نویس مجبور باشد برنامه را از نو بازنویسی کند. بنابراین پیشنهاد میشود که از همان ابتدا یک فریمورک خوب را برای کار انتخاب کنیم تا در ادامه به مشکل برنخوریم. به علاوه هرچه تعداد سکوها در پسزمینه برنامه زیاد شود، به همان میزان سرعت پردازش برنامه کاهش مییابد که البته در پردازندههای جدید کاهش سرعت حس نمیشود.
مزیتهای NativePHP چه مواردی هستند؟
NativePHP توانسته با هسته فریمورکها ارتباط خوبی برقرار کند و با آن میتوان تقریباً هر نوع برنامهای را توسعه داد. کلاسهای این فریمورک کار را برای برنامه نویسی بسیار سادهتر میکند و برای توسعه یک نرمافزار آنلاین، دیگر نیازی نیست تا هم در لاراول و هم در الکترون از دو زبان مجزا استفاده کنیم. تنها کافی است تا NativePHP را درون هر دو فریمورک نصب کنیم و سپس به توسعه نرمافزار خود بپردازیم. البته منظور یکدست بودن کدهای بکاند در پسزمینه برنامه است. زیرا کدهای فرانتاند کمی متفاوتتر هستند؛ ولی با این حال باز هم از بازنویسی کل کدها بهتر است. جالب است بدانیم که NativePHP میتواند پروژههای تحت وب که با PHP توسعه یافتهاند را به پروژههای دسکتاپ تبدیل کند. در کل مزیتهای اصلی فریمورک NativePHP را میتوان موارد زیر دانست:
-
مدیریت پنجره
-
مدیریت منو
-
مدیریت فایل
-
پشتیبانی از پایگاه داده (SQLite)
-
اعلان های بومی
NativePHP بر روی زبان PHP و فریمورکهای زیرمجموعه آن قابل استفاده است:
نحوه استفاده از NativePHP چگونه است؟
قبل از هر چیز نصب NativePHP نیاز به نصب موارد زیر دارد تا برای اجرا آماده شود:
-
PHP 8.1
-
لاراول 9 یا بالاتر
-
NPM
-
Composer
نصب و راه اندازی
با اجرای کد زیر، میتوانید هستهی الکترون را به همراه NativePHP بر روی لاراول نصب کنید:
composer require nativephp/electron
سپس باید نصب کننده پکیج آن را به کمک Artisan نصب کنید تا برنامه NativePHP شما برای اجرا در دسکتاپ آماده شود.
php artisan native:install
پس از اجرای کد زیر، برنامه اولیه اجرا میشود و شما میتوانید پنجره اولیه برنامه را مشاهده کنید:
php artisan native:serve
پیکربندی
پس از گذر از مراحل بالا، یک فایل با نام config/native.php. درون پروژه شما ایجاد میشود که میتوانید تمامی تنظیمات مورد نظر خود را درون آن انجام دهید. این فایل شامل کدهای زیر است:
return [
/**
* The version of your app.
* It is used to determine if the app needs to be updated.
* Increment this value every time you release a new version of your app.
*/
'version' => env('NATIVEPHP_APP_VERSION', '1.0.0'),
/**
* The ID of your application. This should be a unique identifier
* usually in the form of a reverse domain name.
* For example: com.nativephp.app
*/
'app_id' => env('NATIVEPHP_APP_ID'),
/**
* If your application allows deep linking, you can specify the scheme
* to use here. This is the scheme that will be used to open your
* application from within other applications.
* For example: "nativephp"
*
* This would allow you to open your application using a URL like:
* nativephp://some/path
*/
'deeplink_scheme' => env('NATIVEPHP_DEEPLINK_SCHEME'),
/**
* The author of your application.
*/
'author' => env('NATIVEPHP_APP_AUTHOR'),
/**
* The default service provider for your application. This provider
* takes care of bootstrapping your application and configuring
* any global hotkeys, menus, windows, etc.
*/
'provider' => \App\Providers\NativeAppServiceProvider::class,
/**
* The NativePHP updater configuration.
*/
'updater' => [
/**
* Whether or not the updater is enabled. Please note that the
* updater will only work when your application is bundled
* for production.
*/
'enabled' => env('NATIVEPHP_UPDATER_ENABLED', true),
/**
* The updater provider to use.
* Supported: "s3", "spaces"
*/
'default' => env('NATIVEPHP_UPDATER_PROVIDER', 'spaces'),
'providers' => [
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
'path' => env('NATIVEPHP_UPDATER_PATH', null),
],
'spaces' => [
'driver' => 'spaces',
'key' => env('DO_SPACES_KEY_ID'),
'secret' => env('DO_SPACES_SECRET_ACCESS_KEY'),
'name' => env('DO_SPACES_NAME'),
'region' => env('DO_SPACES_REGION'),
'path' => env('NATIVEPHP_UPDATER_PATH', null),
],
],
],
];
چرخه عمر برنامه NativePHP
در همان ابتدا که برنامه شروع به کار میکند، یک سری دستورات جهت اطمینان از اجرای صحیح برنامه، به صورت پیشفرض اجرا میشوند که شامل موارد زیر هستند:
-
فریمورک الکترون یا تاوری برای نمایش پنجره ویندوز اجرا میشود.
-
NativePHP php artisan migrate برای اطمینان از به روز بودن پایگاه داده برنامه اجرا میشود.
-
NativePHP php artisan serve برای راه اندازی سرور توسعه PHP اجرا می شود.
-
NativePHP برنامه شما را با اجرای boot()متد بر روی شما بوت می کند NativeAppServiceProvider.
-
علاوه بر متود boot()، هسته NativePHP یک رویداد Native\Laravel\Events\App\ApplicationBooted را نیز ارسال میکند.
NativeAppServiceProvider
هنگام اجرا php artisan native:install، هسته NativePHP یک NativeAppServiceProviderto را منتشر میکند که در مسیر زیر قرار میگیرد:
app/Providers/NativeAppServiceProvider.php.
میتوانید از این سرویس، برای تقویت برنامه خود استفاده کنید برای مثال، ممکن است بخواهید یک پنجره باز کنید، میانبرهای عمومی را ثبت کنید، یا منوی برنامه خود را پیکربندی کنید. حالت پیش فرض NativeAppServiceProvider به شکل زیر است:
namespace App\Providers;
use Native\Laravel\Facades\ContextMenu;
use Native\Laravel\Facades\Dock;
use Native\Laravel\Facades\Window;
use Native\Laravel\GlobalShortcut;
use Native\Laravel\Menu\Menu;
class NativeAppServiceProvider
{
/**
* Executed once the native application has been booted.
* Use this method to open windows, register global shortcuts, etc.
*/
public function boot(): void
{
Menu::new()
->appMenu()
->submenu('About', Menu::new()
->link('https://nativephp.com', 'NativePHP')
)
->submenu('View', Menu::new()
->toggleFullscreen()
->separator()
->toggleDevTools()
)
->register();
Window::open()
->width(800)
->height(800);
}
}
سخن پایانی
امروزه بیشتر اپلیکیشنها استراتژی اجرای آنلاین را پیش گرفتهاند و برنامههای PWA و تحت وب هر روز درحال گسترش هستند. با این وجود گاهی نیاز است که برخی برنامهها به صورت مستقیم و مستقل بر روی سیستمعامل کاربران اجرا شوند و همین امر موجب شده تا فریمورکهای نظیر Electron و Tauri توسعه پیدا کنند. از آنجا که کار با این فریمفرکها بین توسعه دهندگان بسیار محبوب شده، پیشبینی میشود که فریمورک NativePHP نیز بتواند به همان اندازه محبوب شود و بخش قابل توجهی از سهم بازار را به خود اختصاص دهد. اگر به قدرت Electron و Tauri در توسعه برنامههای دسکتاپ شک دارید، کافی است بدانید که محیط توسعه VSCode با Electron توسعه داده شده است و امروز تبدیل به قدرتمندترین و سبکترین IDE در جهان شده که در همه سیستمعاملهای دسکتاپ قابل اجرا است و تاکنون میلیونها بار دانلود و استفاده شده و جایگزین IDE های قدیمی شده است.