web-dev-qa-db-ja.com

Web開発用のワークフローの選択/作成に助けが必要

私は大人の人生のほとんどの部分でWebサイトのデザインとプログラミングを行ってきました。私はいつもこのソロをやっており、ほとんどがフリーランスで、単一のマシンから作業しています。

現在、コーディングとサイトの公開(FTP経由)にDreamweaverを使用しており、ライブサイトで直接作業しています。それは私の「ワークフロー」の範囲についてです。私は主にPHPとフレームワークCakePHPを使用しています。

より良い開発手法を採用するときがきたと思います。これが私が心に留めていることであり、私が支援を必要としています:

  • リモートのテスト/開発サーバーを設定して、dev.address.comで作業してテストし、address.comにデプロイできるようにします。開発サーバーでの作業が終了したら、サイトを展開するための優れたソリューションが必要です。現時点では、サイト全体をスキャン/比較して、更新されたファイルのみをアップロードする必要があります。1日に複数の展開を行わなければならない場合、これは面倒です。
  • ラップトップとデスクトップの2つの異なるコンピューターで作業できるようにする必要があります。繰り返しますが、今のところ、あるコンピューターから別のコンピューターに切り替えるたびに、開発サイト全体をスキャン/比較し、ファイルを更新する必要があります。切り替えるたびにこれを忘れると、何時間もの作業が失われる可能性があります。
  • 私は自分自身で働いていますが、バージョン管理のためにGITなどの作業に慣れたいと思います。おそらくこれにより、2台の異なるコンピューターからの作業をより簡単に、またはより効率的にすることもできます。また、必要に応じて、サイトを以前のバージョンにロールバックできると便利です。

これらの問題を解決する方法についてのアドバイスやガイダンスをいただければ幸いです。私はさまざまな種類のワークフローについて読みましたが、私の特定のケースでは実際には何も意味がないようです。

前もって感謝します。

2
Francisco

ワークフローを改善するために使用できるツールがいくつかあります。それらを一度にすべて採用する必要はありませんが、それらは協調して非常にうまく機能するため、最終的にそれらのほとんどを採用することを計画する必要があります。

これはかなり長くなりましたが、私は短期的に価値のあるさまざまな方向にあなたを向けようとしました。

TL; DR:「gitの使用を開始して、基本的なLinuxサーバーを快適に実行してください。これら2つを解決したら、差し迫った問題を解決し、次のステップを検討することができます。」

[〜#〜] vcs [〜#〜](git)

いくつかのバージョン管理システムを採用したい。ユビキタスなので、gitがデフォルトの選択です。 gitのようなVCSの採用は、自動デプロイメント、自動テスト、そして最終的には本格的な継続的統合(CI)のようなものの一種の前提条件です。手動でのデプロイにも役立ちます。リリースにタグを付けることについての少しの規律により、悪い変更のロールバックがはるかに簡単になり、予測可能になります。

真実の中心的な情報源としてリモートリポジトリを維持する必要があります。リモートリポジトリは、ローカルリポジトリのOriginリモートとして設定されます。座って仕事をすると、git pullを使用して、コードの最新バージョンを入手してください。ローカルでコミットを行った後、git Pushをリモートに追加して、変更を他の場所で使用できるようにします。

そのリモートリポジトリを信頼できる場所でホストする必要があります。あなたはそれをいくつかのVPSに貼り付けてssh経由でそれにアクセスすることができますが、いくつかの素晴らしいツールをテーブルに残します。

すばやく簡単なソリューションは、bitbucket.orgでアカウントを作成することです。プライベートリポジトリを含む無料で、課題追跡などの素敵なWebインターフェイスが含まれています。

サードパーティのサービス[1]にコードを配置することを懸念している場合、またはVPSの管理を開始する機会が欲しい場合(時間と精神的な帯域幅がある場合は、これは素晴らしいことです)、月額$ 10のVPSとインストール GitLab Community Edition 。 GitHubに似ていますが、独自のサーバーで実行します。それはかなり素晴らしいです、そしてオムニバスインストーラーはインストールとアップデートを比較的簡単にします。

ソリンPの回答 で述べたように、GUIクライアントはgitで利用できます。 SourceTreeとGitHub Desktopはどちらも優れています。前者の方が好きです。つまり、CLIツールをプライマリインターフェイスとして使用してgitを実行する必要があります。 CLIはどこでも機能します。

Gitは少し怖いかもしれませんが、小さく始めて成長することができます。とはいえ、gitの動作の基本的な理解は非常に役立ちます。 Git From the Bottom Up はかなり素晴らしいです。最初のページの用語を理解することは不可欠です。

はじめに、少なくともgitの動作を理解し、基本的なサブコマンドclonecheckoutaddrmに精通している必要があります。 、statusdiffcommitpullPush

開発

特にローカル環境がWindowsの場合は、ローカル仮想マシンを十分に使用することはお勧めできません。 VirtualBoxとVagrant ASAPをよく理解してください。これにより、デプロイメント環境によく似たローカル環境に対して開発を行うことができます。また、基本的なLinux管理者のスキルをすぐに活用できる優れた方法でもあります。

VirtualBoxの「共有フォルダー」機能を使用して、クライアント(仮想、Linux)マシン上のディレクトリがホスト(物理)マシン上のディレクトリにマップされるようにします。これは、仮想マシンが「ヘッドレス」で実行されていることを意味します。グラフィカルインターフェイスはなく、コンソールのみです。エディター/ IDE、gitクライアントなどはすべて日常のコンピューターで実行されますが、Webサーバー、PHPインタープリター、SQLデータベースなど)はすべて仮想マシン内で実行されます。

Editor/IDEに関する限り、好きなものを自由に使用できます。私はVimでコーディングする人を知っています。私は長い間、emacsのホールドアウトでした。他の人はより洗練されたIDEを好みます。そうは言っても、Dreamweaverが最適であるかどうかは非常に疑問です。

私のIDE PHPはPHPStormで選択できます。無料ではありませんが、高価ではありません。PHP生活のためにそれは非常に簡単なIMOです。それはgitを理解し、Niceデータベースクライアントが組み込まれており、xdebugによるデバッグは非常にうまく機能し、静的分析はなくてはならないものになります。

支払いが問題にならない場合は、通常、「EAP」ビルドを無料で入手できます。これは基本的に次のリリースのベータ版ですが、通常は非常に安定しています。

もう1つの方法は、無料で優れたNetBeansです。しかし、最後に確認したPHPStormほど洗練されていません。

もっと軽量なものを好むなら、Sublime Textのような多くの人々、そしてAtomのような新人(あるいは意外なことに、Visual Studio Code)が好きです。

結論:少なくとも1つまたは2つの代替エディター/ IDEをチェックするのに時間をかけます。 FTP統合のため、Dreamweaverにしがみついた人がほとんどです。しかし、とにかくこれに依存するべきではありません(以下を参照)。

導入

デプロイとは、サイトまたはアプリの新しいバージョンをサーバーにインストールすることです。選択する方法は、ホスティングインフラストラクチャの外観によって異なります。

VPSes

私は商品VPSのほぼすべてをホストします。プロバイダーはたくさんあります。 DigitalOceanとLinodeはこの混雑した分野で人気があります。 AmazonのAWSもVPS(「EC2」サービス)も提供していますが、初心者がそこから始めることはお勧めしません。 AWSは、自動化とオーケストレーションが必要なときに本当に威力を発揮しますが、コストを見積もるのは難しく、複雑さは威圧的です。

合理的にモダンなフレームワークベースのPHPプロジェクトをVPSに更新することのコアは、次のようになります(完全に手動で実行した場合):

localhost$ ssh [email protected]
myvps$ cd /path/to/project
myvps$ git pull 
myvps$ composer install

これはベストプラクティスと呼ばれるものではありませんが、展開プロセスがそのように見えるようになった場合、FTP経由で同期を試みるよりもはるかに先に進んでいます。

そこから、導入ツールの調査を開始できます。 Capitstrano は祖父ですが、他にも存在します。これらのツールは物事を自動化するので、人よりも少し賢くなります。たとえば、capistranoはソースの正しいバージョンをローカルでチェックアウトし、それらをバンドルしてサーバーに送信し、タイムスタンプ付きのディレクトリに展開してから、シンボリックリンクを操作して、ウェブルートに新しいバージョンを指定します。これにより、シンボリックリンクを以前のバージョンにスワップバックするのと同じくらい簡単にロールバックできます。これらのツールを読むことは間違いなく価値があります。彼らはあなたのニーズに対してやり過ぎかもしれないし、そうでないかもしれません。

もう1つの使い慣れたツールは rsync です。 Rsyncの仕事は、ファイルのツリーを効率的に同期することであり、それについて非常に優れています。サーバーでgitを実行したくない場合は、ローカルのgitとrysncを中心に独自のデプロイプロセスを構築して、チェックアウト(またはgit archive)ソースのローカルツリー。必要なビルドプロセスを実行します(たとえば、composer install)、そしてすべてをサーバーにrsyncします。

これらのツールはいずれも、簡単なシェルスクリプトを使用して、自動展開を構築するために使用できます。新しいリリースをプッシュ(またはプル)し、問題が発生した場合に簡単にロールバックできるスクリプトを作成することをお勧めします(カピストラーノスタイルのシンボリックリンクのトリックは、始めるのに最適です) 。

非VPS環境

私はこれらについて実際に話すことはできません。使い慣れた昔ながらの共有ホスティングがあり、シェルアクセスのないSSHにかなり制限されています。 PHPにはHerokuに似たplatform-as-a-serviceのサービスもありますが、私はそのアイデアを気に入りました。

とはいえ、共有ホスティングと完全に結婚している場合は、適切なCLI FTPクライアントを使用して、rsyncスタイルのワークフローを概算できる可能性があります。

データベースはどうですか?

コードのデプロイは素晴らしいですが、新しいコードリリースでは、ある種のデータベースの変更が必要な場合があります(たとえば、テーブルの新しい列や、修正したバグのアーティファクトを修正する更新など)。

これはより複雑になります(特にロールバックについて考える場合)が、役立つツールがあります。私は PHPmigDoctrine Migrations の両方を使用して大きな成功を収めましたが、他にもあります。

ここでの基本的な考え方は、小さな移行クラスを作成し、移行ツールで実行する必要があるクラスを追跡して実行することです。あなたの小さなbashスクリプトは、どこかにphpmig migrateしたがって、デプロイを実行すると、保留中のDB移行が自動的に実行されます。

[1]ほとんどの人はIMOを気にする必要はありませんが、私はあなたの状況、政治、または妄想のレベルを知りません。

1
timdev

私の推奨するコンボは:

  • 両方のコンピュータでNetbeans IDE
  • 両方のコンピューターでGitリポジトリーをdev.address.comに使用します
  • 必要に応じて、 GitFTP を使用して、address.comリポジトリからdev.address.comへの差分のみをデプロイします

GIT FTPを使用すると、複数のサーバーに変更をデプロイするための複数のプロファイルを使用できます。

必要に応じて、SourceTreeリポジトリへのNiceグラフィカルインターフェイスにGitまたはGitHub Desktopを使用できます。

0
Sorin P

コンピューターを BitTorrent Sync で同期させます(現在は「Resilio」に名称が変更されていますが、個人向けの無料バージョンはあなたが望んでいるものです)。LAN上で動作し、中央サーバーはなく、非常に高速です。デバイスを切り替えるシングルユーザーに最適です。

または、Dropboxを使用します。これは、非常に簡単です。大きなPSTが既に縮小されている設計フェーズを超えたコーディングフェーズのWebプロジェクトは、ほとんどスペースをとらないため、無料のDropboxで十分です。また、重要なものはバックアップされ続けました。災害が起こります。

各プロジェクトでgitを使用すると、最終的には以前のバージョンを再開するためにそれを使用する方法を学習します(おそらくいくつかの不足しているHEAD/multiple HEAD惨事を伴うでしょう方法)しかし、今のところは、git init .およびgit commit仕事。それが、昨日からではなく、今から始めるべきことです。

Gitは、チームでの作業のほとんどの問題を処理します。チームがそれを使用する方法を知ったら。

作業バージョンのデータベースダンプ(.sqlファイル)を保持し、それらをgitリポジトリに追加し、適切なデータベースにアップロードするスクリプトも追加します。

0
ZJR