My Daily Web Development Tools

After reading a post on the IDE used by @skoop as one of the tools he uses in his everyday development, I felt inspired to do the same and hope that others find my individual set up useful to them.

The first and most obvious place to start, is that which is at the centre of the universe for a PHP developer, his IDE of choice and at present, that honour goes to PhpStorm.

Back in the day when I first started out coding in PHP I used PHPEdit. It was free and built around speed and productivity. I still miss their drop marks feature and surprised other IDEs have not incorporated this into their environments. Once it became commercial, I moved onto something else unmemorable, before adopting Zend Studio 5 and 5.5. Good days. I then persisted with Zend Studio 6 for Eclipse but refused to shell out for 7 and switched to Netbeans after hearing good things. I was happy for months until I started having performance issues. After failing to resolve this annoyance I finally moved onto PhpStorm and haven’t looked back.

To execute the PHP files I write I will have a Virtual Machine (VM) running. This is either VirtualBox for older sites, or VMWare Fusion for the rest of them. Any web site I’m building will have a VM that matches the production environment as best as possible, with Ubuntu Server as a first choice operating system.

To manage my PHP installation I use Zend Server CE. I find this to be an easy maintenance option when I need to upgrade PHP to the newest version. The only annoying part is disabling the extensions that hook into PHP when I want to use XDebug on my VMs.

To view the result of my work, I turn to Google Chrome. I used to be an avid Firefox fan but have now switched over to Chrome as my browser of choice. You can’t argue with the performance benefits here which was a large part of why I switched. The extensions that are now available really make switching back to Firefox a no no.

In moving onto a typical workflow for an iteration of work, I will use Jira to manage the tasks I have to work towards. Each task has a ticket number and this is used as a reference for the topic branch I create with Git, or more specifically GitFlow. From here I begin to work on the task, completing small logical units of changes to the codebase and committing them to the branch. I have a Git Commit hook in place that runs a PHP lint check on the files prior to accepting the commit for a message to be written. A custom message template is displayed ready for me to add a subject line and body with reasons why the commit exists. At regular points I run PHPUnit to check I’ve not broken any tests but also once commits are pushed to GitHub, the Jenkins CI server checks the code base out verifies that the build passes, alerting me by email if not. If needed any documentation is added to the project wiki which is run on MediaWiki. After the task is complete I’ll finish the topic branch and close the issue ticket in Jira.

When I need to interact with the database, my preferred client is Navicat which connects over SSH to the target server. I used to use PHPMyAdmin back in the early days but ultimately was never happy having this available via a URL for security concerns. I tried to get along with the MySQL GUI tools but it was never meant to be. Looks great but Navicat is better.

The last but simplest tool I couldn’t live without is Jumpcut, a clipboard manager to give me access to my history of CMD+C copies. Absolutely invaluable to avoid multiple task switching between apps to copy blocks of text.

The complete list of tools I’ve described are as follows:

  • PHPStorm (IDE)
  • VirtualBox/VMWare Fusion (Virtualisation)
  • Chrome (Browser)
  • Jira (Issue Tracker)
  • Git (Version Control System)
  • GitFlow (DVCS Branching Model)
  • PHPUnit (Testing Framework)
  • MediaWiki (Wiki)
  • Navicat (MySQL Client)
  • Jumpcut (Clipboard Buffer)

Associated image “Toolbox full of tools” by Jason Rhode, available under an Attribution-NonCommercial-ShareAlike 2.0 Generic licence.

Leave a Reply

Your email address will not be published. Required fields are marked *